blob: c90417ffa4db53a65e4620bc3ac0801feecc92f1 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package com.sun.star.wizards.table;
import com.sun.star.awt.XCheckBox;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XListBox;
import com.sun.star.awt.XRadioButton;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.uno.AnyConverter;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.JavaTools;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.db.TableDescriptor;
import com.sun.star.wizards.db.TypeInspector;
import com.sun.star.wizards.ui.FieldSelection;
import com.sun.star.wizards.ui.UIConsts;
import com.sun.star.wizards.ui.UnoDialog;
import com.sun.star.wizards.ui.XFieldSelectionListener;
public class PrimaryKeyHandler implements XFieldSelectionListener
{
private TableWizard CurUnoDialog;
private short curtabindex;
private final static String SPRIMEKEYMODE = "togglePrimeKeyFields";
private final static String SSINGLEKEYMODE = "toggleSinglePrimeKeyFields";
private final static String SSEVERALKEYMODE = "toggleSeveralPrimeKeyFields";
private XRadioButton optAddAutomatically;
private XRadioButton optUseExisting;
private XRadioButton optUseSeveral;
private XCheckBox chkUsePrimaryKey;
private XCheckBox chkcreatePrimaryKey;
private XCheckBox chkApplyAutoValueExisting;
private XCheckBox chkApplyAutoValueAutomatic;
private XListBox lstSinglePrimeKey;
private XFixedText lblPrimeFieldName;
private FieldSelection curPrimaryKeySelection;
private String[] fieldnames;
private TableDescriptor curTableDescriptor;
private int nAutoPrimeKeyDataType;
private boolean bAutoPrimaryKeysupportsAutoIncrmentation;
private final static String SAUTOMATICKEYFIELDNAME = "ID";
public PrimaryKeyHandler(TableWizard _CurUnoDialog, TableDescriptor _curTableDescriptor)
{
this.CurUnoDialog = _CurUnoDialog;
curTableDescriptor = _curTableDescriptor;
bAutoPrimaryKeysupportsAutoIncrmentation = isAutoPrimeKeyAutoIncrementationsupported();
curtabindex = (short) ((TableWizard.SOPRIMARYKEYPAGE * 100) - 20);
Integer IPRIMEKEYSTEP = new Integer(TableWizard.SOPRIMARYKEYPAGE);
final String sExplanations = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 26);
final String screatePrimaryKey = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 27);
final String slblPrimeFieldName = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 31);
final String sApplyAutoValue = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 33);
final String sAddAutomatically = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 28);
final String sUseExisting = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 29);
final String sUseSeveral = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 30);
final String slblAvailableFields = CurUnoDialog.m_oResource.getResText(UIConsts.RID_QUERY + 4);
final String slblSelPrimaryFields = CurUnoDialog.m_oResource.getResText(UIConsts.RID_TABLE + 32);
CurUnoDialog.insertLabel("lblExplanation",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
40, sExplanations, Boolean.TRUE, 91, 27, IPRIMEKEYSTEP, new Short(curtabindex++), 233
});
chkcreatePrimaryKey = CurUnoDialog.insertCheckBox("chkcreatePrimaryKey", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_CHK_USEPRIMEKEY", screatePrimaryKey, 97, 70, new Short((short) 1), IPRIMEKEYSTEP, new Short(curtabindex++), 160
});
optAddAutomatically = CurUnoDialog.insertRadioButton("optAddAutomatically", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_OPT_PK_AUTOMATIC", sAddAutomatically, 106, 82, new Short((short) 1), IPRIMEKEYSTEP, new Short(curtabindex++), 200
});
optUseExisting = CurUnoDialog.insertRadioButton("optUseExisting", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
}, //94
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_OPT_PK_SINGLE", sUseExisting, 106, 104, IPRIMEKEYSTEP, new Short(curtabindex++), 200
});
optUseSeveral = CurUnoDialog.insertRadioButton("optUseSeveral", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_OPT_PK_SEVERAL", sUseSeveral, 106, 132, IPRIMEKEYSTEP, new Short(curtabindex++), 200
});
chkApplyAutoValueAutomatic = CurUnoDialog.insertCheckBox("chkApplyAutoValueAutomatic", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
}, //107
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_CK_PK_AUTOVALUE_AUTOMATIC", sApplyAutoValue, 116, 92, IPRIMEKEYSTEP, new Short(curtabindex++), 68
});
lblPrimeFieldName = CurUnoDialog.insertLabel("lblPrimeFieldName",
new String[]
{
PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.FALSE, UIConsts.INTEGERS[8], slblPrimeFieldName, 116, 117, IPRIMEKEYSTEP, new Short(curtabindex++), 46
});
lstSinglePrimeKey = CurUnoDialog.insertListBox("lstSinglePrimeKey", "onPrimeKeySelected", null, this,
new String[]
{
"Dropdown",
PropertyNames.PROPERTY_ENABLED,
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL,
"LineCount",
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
PropertyNames.PROPERTY_TABINDEX,
PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.TRUE,
Boolean.FALSE,
12,
"HID:WIZARDS_HID_DLGTABLE_LB_PK_FIELDNAME",
Short.valueOf(UnoDialog.getListBoxLineCount()),
162,
115,
IPRIMEKEYSTEP,
new Short(curtabindex++),
80
});
chkApplyAutoValueExisting = CurUnoDialog.insertCheckBox("chkApplyAutoValueExisting", SPRIMEKEYMODE, this,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
}, //107
new Object[]
{
UIConsts.INTEGERS[8], "HID:WIZARDS_HID_DLGTABLE_CK_PK_AUTOVALUE", sApplyAutoValue, 248, 117, IPRIMEKEYSTEP, new Short(curtabindex++), 66
});
curPrimaryKeySelection = new FieldSelection(CurUnoDialog, IPRIMEKEYSTEP.intValue(), 116, 142, 208, 47, slblAvailableFields, slblSelPrimaryFields, 41234, false);
curPrimaryKeySelection.addFieldSelectionListener(this);
}
public void initialize()
{
// boolean breselect;
fieldnames = curTableDescriptor.getNonBinaryFieldNames();
String[] skeyfieldnames = curPrimaryKeySelection.getSelectedFieldNames();
curPrimaryKeySelection.initialize(fieldnames, false);
if (skeyfieldnames != null)
{
if (skeyfieldnames.length > 0)
{
String[] snewkeyfieldnames = JavaTools.removeOutdatedFields(skeyfieldnames, fieldnames);
curPrimaryKeySelection.setSelectedFieldNames(snewkeyfieldnames);
}
}
String selfield = lstSinglePrimeKey.getSelectedItem();
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSinglePrimeKey), PropertyNames.STRING_ITEM_LIST, fieldnames);
if (selfield != null)
{
if (JavaTools.FieldInList(fieldnames, selfield) > -1)
{
lstSinglePrimeKey.selectItem(selfield, true);
}
}
togglePrimeKeyFields();
}
private boolean isAutoPrimeKeyAutoIncrementationsupported()
{
TypeInspector.TypeInfo aAutoPrimeTypeInfo;
aAutoPrimeTypeInfo = curTableDescriptor.oTypeInspector.findAutomaticPrimaryKeyType();
return aAutoPrimeTypeInfo.bisAutoIncrementable;
}
public boolean iscompleted()
{
if (chkcreatePrimaryKey.getState() == 0)
{
return true;
}
if (this.optAddAutomatically.getState())
{
return true;
}
if (optUseExisting.getState())
{
fieldnames = curTableDescriptor.getNonBinaryFieldNames();
String selfield = lstSinglePrimeKey.getSelectedItem();
if (selfield != null)
{
return (JavaTools.FieldInList(fieldnames, selfield) > -1);
}
}
if (optUseSeveral.getState())
{
fieldnames = curTableDescriptor.getNonBinaryFieldNames();
String[] skeyfieldnames = curPrimaryKeySelection.getSelectedFieldNames();
String[] snewkeyfieldnames = JavaTools.removeOutdatedFields(skeyfieldnames, fieldnames);
return (snewkeyfieldnames.length > 0);
}
return false;
}
public void togglePrimeKeyFields()
{
boolean bdoEnable = (this.chkcreatePrimaryKey.getState() == 1);
Helper.setUnoPropertyValue(UnoDialog.getModel(optAddAutomatically), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueAutomatic), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bAutoPrimaryKeysupportsAutoIncrmentation && bdoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(optUseExisting), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(optUseSeveral), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoEnable));
//toggle subcontrols of the radiobuttons...
toggleAutomaticAutoValueCheckBox();
boolean benableSinglePrimekeyControls = bdoEnable && optUseExisting.getState();
toggleSinglePrimeKeyFields(benableSinglePrimekeyControls);
boolean benableSeveralPrimekeyControls = bdoEnable && optUseSeveral.getState();
curPrimaryKeySelection.toggleListboxControls(Boolean.valueOf(benableSeveralPrimekeyControls));
// toggle the following steps of the dialog...
if (!bdoEnable)
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, true);
}
else
{
if (benableSeveralPrimekeyControls)
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, (curPrimaryKeySelection.getSelectedFieldNames().length > 0));
}
else if (benableSinglePrimekeyControls)
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, UnoDialog.isListBoxSelected(lstSinglePrimeKey)); //.getSelectedItemPos() != -1);
}
else if (optAddAutomatically.getState())
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, true);
}
}
}
private boolean isAutoIncrementatable(String _fieldname)
{
boolean bisAutoIncrementable = false;
try
{
XPropertySet xColPropertySet = curTableDescriptor.getByName(_fieldname);
if (xColPropertySet != null)
{
if (curTableDescriptor.getDBDataTypeInspector() != null)
{
return curTableDescriptor.getDBDataTypeInspector().isAutoIncrementable(xColPropertySet);
}
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
return false;
}
public boolean isAutomaticMode()
{
boolean bisAutomaticMode = false;
if (chkcreatePrimaryKey.getState() == 1)
{
bisAutomaticMode = ((Short) Helper.getUnoPropertyValue(UnoDialog.getModel(optAddAutomatically), PropertyNames.PROPERTY_STATE)).shortValue() == (short) 1;
}
return bisAutomaticMode;
}
public String getAutomaticFieldName()
{
return SAUTOMATICKEYFIELDNAME;
}
public boolean isAutoIncremented()
{
boolean bischecked = false;
if (chkcreatePrimaryKey.getState() == 1)
{
boolean bisAutomaticMode = ((Short) Helper.getUnoPropertyValue(UnoDialog.getModel(optAddAutomatically), PropertyNames.PROPERTY_STATE)).shortValue() == (short) 1;
boolean bisExistingMode = ((Short) Helper.getUnoPropertyValue(UnoDialog.getModel(optUseExisting), PropertyNames.PROPERTY_STATE)).shortValue() == (short) 1;
if (bisAutomaticMode)
{
bischecked = chkApplyAutoValueAutomatic.getState() == (short) 1;
}
else if (bisExistingMode)
{
bischecked = chkApplyAutoValueExisting.getState() == (short) 1;
}
}
return bischecked;
}
public void onPrimeKeySelected()
{
try
{
String selfieldname = lstSinglePrimeKey.getSelectedItem();
boolean bdoenable = isAutoIncrementatable(selfieldname);
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, lstSinglePrimeKey.getSelectedItemPos() != -1);
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueExisting), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoenable));
XPropertySet xColPropertySet = curTableDescriptor.getByName(selfieldname);
boolean bIsAutoIncremented = ((Boolean) xColPropertySet.getPropertyValue("IsAutoIncrement")).booleanValue();
if (bIsAutoIncremented)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueExisting), PropertyNames.PROPERTY_STATE, new Short((short) 1));
}
else
{
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueExisting), PropertyNames.PROPERTY_STATE, new Short((short) 0));
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
private void toggleAutomaticAutoValueCheckBox()
{
try
{
boolean bisAutomaticMode = AnyConverter.toBoolean(Helper.getUnoPropertyValue(UnoDialog.getModel(optAddAutomatically), PropertyNames.PROPERTY_ENABLED));
boolean bdoenable = bAutoPrimaryKeysupportsAutoIncrmentation && optAddAutomatically.getState() && bisAutomaticMode;
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueAutomatic), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoenable));
}
catch (IllegalArgumentException e)
{
e.printStackTrace(System.out);
}
}
private void toggleSinglePrimeKeyFields(boolean _bdoenable)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(lblPrimeFieldName), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoenable));
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSinglePrimeKey), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoenable));
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueExisting), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoenable));
boolean bdoenableAutoValueCheckBox = (isAutoIncrementatable(lstSinglePrimeKey.getSelectedItem()) && _bdoenable);
Helper.setUnoPropertyValue(UnoDialog.getModel(chkApplyAutoValueExisting), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bdoenableAutoValueCheckBox));
}
private void toggleSeveralPrimeKeyFields()
{
boolean bdoEnable = (this.optUseSeveral.getState());
curPrimaryKeySelection.toggleListboxControls(Boolean.valueOf(bdoEnable));
}
public String[] getPrimaryKeyFields(TableDescriptor _curtabledescriptor)
{
if (chkcreatePrimaryKey.getState() == 0)
{
return null;
}
if (fieldnames == null)
{
initialize();
}
if (optUseSeveral.getState())
{
return curPrimaryKeySelection.getSelectedFieldNames();
}
else if (optUseExisting.getState())
{
return (new String[]
{
lstSinglePrimeKey.getSelectedItem()
});
}
else if (optAddAutomatically.getState())
{
return (new String[]
{
SAUTOMATICKEYFIELDNAME
});
}
return null;
}
public int getID()
{
return 0;
}
public void moveItemDown(String Selitem)
{
}
public void moveItemUp(String Selitem)
{
}
public void setID(String sIncSuffix)
{
}
public void shiftFromLeftToRight(String[] SelItems, String[] NewItems)
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, (curPrimaryKeySelection.getSelectedFieldNames().length > 0));
}
public void shiftFromRightToLeft(String[] OldSelItems, String[] NewItems)
{
CurUnoDialog.setcompleted(TableWizard.SOPRIMARYKEYPAGE, (curPrimaryKeySelection.getSelectedFieldNames().length > 0));
}
}