blob: 13ee8932b017466b6885d58a58eefd08ac7bfb7c [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.form;
import com.sun.star.awt.ItemEvent;
import com.sun.star.awt.VclWindowPeerAttribute;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XListBox;
import com.sun.star.uno.Exception;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.HelpIds;
import com.sun.star.wizards.common.JavaTools;
import com.sun.star.wizards.db.RelationController;
import com.sun.star.wizards.ui.UnoDialog;
import com.sun.star.wizards.ui.WizardDialog;
import com.sun.star.wizards.ui.UIConsts;
import com.sun.star.wizards.ui.DBLimitedFieldSelection;
import com.sun.star.wizards.common.PropertyNames;
public class FieldLinker extends DBLimitedFieldSelection
{
private XFixedText[] lblSlaveFields;
private XFixedText[] lblMasterFields;
private XListBox[] lstSlaveFields;
private XListBox[] lstMasterFields;
private int[] SOLINKLST = null;
private String[] sSlaveListHeader;
private String[] sMasterListHeader; //CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 40);
public FieldLinker(WizardDialog _CurUnoDialog, int iStep, int iCompPosX, int iCompPosY, int iCompWidth, int _firsthelpid)
{
super(_CurUnoDialog, iStep, iCompPosX, iCompPosY, iCompWidth, _firsthelpid);
}
protected void insertControlGroup(int i)
{
try
{
if (i == 0)
{
lblSlaveFields = new XFixedText[rowcount];
lblMasterFields = new XFixedText[rowcount];
lstSlaveFields = new XListBox[rowcount];
lstMasterFields = new XListBox[rowcount];
int SOFIRSTLINKLST = 0;
int SOSECLINKLST = 1;
int SOTHIRDLINKLST = 2;
int SOFOURTHLINKLST = 3;
Integer IListBoxPosX = new Integer(iCompPosX + 6);
sSlaveListHeader = CurUnoDialog.m_oResource.getResArray(UIConsts.RID_FORM + 20, 4); //new String[rowcount];PropertyNames.EMPTY_STRING; //CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 40);
sMasterListHeader = CurUnoDialog.m_oResource.getResArray(UIConsts.RID_FORM + 24, 4);// new String[rowcount];PropertyNames.EMPTY_STRING; //CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 40);
SOLINKLST = new int[]
{
SOFIRSTLINKLST, SOSECLINKLST, SOTHIRDLINKLST, SOFOURTHLINKLST
};
}
String sSlaveHidString = HelpIds.getHelpIdString(FirstHelpIndex + (i * 2));
String sMasterHidString = HelpIds.getHelpIdString(FirstHelpIndex + (i * 2) + 1);
boolean bDoEnable = (i < 2);
lblSlaveFields[i] = CurUnoDialog.insertLabel("lblSlaveFieldLink" + Integer.toString(i + 1),
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.valueOf(bDoEnable), 8, sSlaveListHeader[i], 97, new Integer(iCurPosY), IStep, new Short(curtabindex++), 97
});
lstSlaveFields[i] = CurUnoDialog.insertListBox("lstSlaveFieldLink" + (i + 1), SOLINKLST[i], null, new ItemListenerImpl(),
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.valueOf(bDoEnable),
UIConsts.INTEGER_12,
sSlaveHidString,
Short.valueOf(UnoDialog.getListBoxLineCount()),
97,
new Integer(iCurPosY + 10),
IStep,
new Short(curtabindex++),
97
});
lblMasterFields[i] = CurUnoDialog.insertLabel("lblMasterFieldLink" + Integer.toString(i + 1),
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.valueOf(bDoEnable), 8, sMasterListHeader[i], 206, new Integer(iCurPosY), IStep, new Short(curtabindex++), 97
});
lstMasterFields[i] = CurUnoDialog.insertListBox("lstMasterFieldLink" + Integer.toString(i + 1), SOLINKLST[i], null, new ItemListenerImpl(),
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.valueOf(bDoEnable),
UIConsts.INTEGER_12,
sMasterHidString,
Short.valueOf(UnoDialog.getListBoxLineCount()),
206,
new Integer(iCurPosY + 10),
IStep,
new Short(curtabindex++),
97
});
iCurPosY = iCurPosY + 38;
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
protected void enableNextControlRow(int curindex)
{
// setMaxSelIndex();
boolean bSlaveField = lstSlaveFields[curindex].getSelectedItemPos() > 0;
boolean bMasterField = lstMasterFields[curindex].getSelectedItemPos() > 0;
boolean bDoEnable = (bSlaveField && bMasterField);
if (!bDoEnable)
{
moveupSelectedItems(curindex, bDoEnable);
}
else
{
toggleControlRow(curindex + 1, true);
}
}
protected int getMaxSelIndex()
{
int MaxSelIndex = -1;
for (int i = 0; i < rowcount; i++)
{
if ((lstSlaveFields[i].getSelectedItemPos() > 0) && (lstMasterFields[i].getSelectedItemPos() > 0))
{
MaxSelIndex += 1;
}
}
return MaxSelIndex;
}
protected void toggleControlRow(int i, boolean bDoEnable)
{
if (i < rowcount)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(lblSlaveFields[i]), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSlaveFields[i]), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(lblMasterFields[i]), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
Helper.setUnoPropertyValue(UnoDialog.getModel(lstMasterFields[i]), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(bDoEnable));
if (!bDoEnable)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSlaveFields[i]), PropertyNames.SELECTED_ITEMS, new short[] { 0 });
Helper.setUnoPropertyValue(UnoDialog.getModel(lstMasterFields[i]), PropertyNames.SELECTED_ITEMS, new short[] { 0 });
}
}
}
protected void updateFromNextControlRow(int curindex)
{
short iNextMasterItemPos = lstMasterFields[curindex + 1].getSelectedItemPos();
short iNextSlaveItemPos = lstSlaveFields[curindex + 1].getSelectedItemPos();
if ((iNextMasterItemPos != 0) && (iNextSlaveItemPos != 0))
{
Helper.setUnoPropertyValue(UnoDialog.getModel(lstMasterFields[curindex]), PropertyNames.SELECTED_ITEMS, new short[] {iNextMasterItemPos });
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSlaveFields[curindex]), PropertyNames.SELECTED_ITEMS, new short[] {iNextSlaveItemPos});
Helper.setUnoPropertyValue(UnoDialog.getModel(lstMasterFields[curindex + 1]), PropertyNames.SELECTED_ITEMS, new short[] { 0 });
Helper.setUnoPropertyValue(UnoDialog.getModel(lstSlaveFields[curindex + 1]), PropertyNames.SELECTED_ITEMS, new short[] { 0 });
toggleControlRow(curindex, true);
}
}
public void initialize(String[] _AllMasterFieldNames, String[] _AllSlaveFieldNames, String[][] _LinkFieldNames)
{
// short[] MasterSelList = null;
// short[] SlaveSelList = null;
int SOMASTERINDEX = 1;
String[] MasterLinkNames = JavaTools.ArrayOutOfMultiDimArray(_LinkFieldNames, SOMASTERINDEX);
int SOSLAVEINDEX = 0;
String[] SlaveLinkNames = JavaTools.ArrayOutOfMultiDimArray(_LinkFieldNames, SOSLAVEINDEX);
String[] ViewMasterFieldNames = addNoneFieldItemToList(_AllMasterFieldNames); // add '-undefiened-'
String[] ViewSlaveFieldNames = addNoneFieldItemToList(_AllSlaveFieldNames);
for (int i = 0; i < super.rowcount; i++)
{
super.initializeListBox(lstMasterFields[i], ViewMasterFieldNames, MasterLinkNames, i);
super.initializeListBox(lstSlaveFields[i], ViewSlaveFieldNames, SlaveLinkNames, i);
if (_LinkFieldNames != null)
{
toggleControlRow(i, (i <= _LinkFieldNames.length));
}
else
{
toggleControlRow(i, i == 0);
}
}
}
public String[][] getLinkFieldNames(RelationController _oRelationController, String _sReferencedTableName)
{
return _oRelationController.getImportedKeyColumns(_sReferencedTableName);
}
/**
* @return the LinkFieldnames of the joins. When no LinkFieldNames were selected the returned Array is empty.
* When Joins were assigned duplicate a null value is returned
*
*/
public String[][] getLinkFieldNames()
{
// setMaxSelIndex();
int nSelectedIndex = getMaxSelIndex();
String[][] LinkFieldNames = new String[2][nSelectedIndex + 1];
for (int i = 0; i <= nSelectedIndex; i++)
{
LinkFieldNames[0][i] = lstSlaveFields[i].getSelectedItem();
LinkFieldNames[1][i] = lstMasterFields[i].getSelectedItem();
}
int iduplicate = JavaTools.getDuplicateFieldIndex(LinkFieldNames);
if (iduplicate != -1)
{
String sLinkFieldsAreDuplicate = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 19);
String sLocLinkFieldsAreDuplicate = JavaTools.replaceSubString(sLinkFieldsAreDuplicate, LinkFieldNames[0][iduplicate], "<FIELDNAME1>");
sLocLinkFieldsAreDuplicate = JavaTools.replaceSubString(sLocLinkFieldsAreDuplicate, LinkFieldNames[1][iduplicate], "<FIELDNAME2>");
CurUnoDialog.setCurrentStep(FormWizard.SOFIELDLINKER_PAGE);
CurUnoDialog.enableNavigationButtons(true, true, true);
CurUnoDialog.showMessageBox("WarningBox", VclWindowPeerAttribute.OK, sLocLinkFieldsAreDuplicate);
CurUnoDialog.setFocus("lstSlaveFieldLink" + (iduplicate + 1));
return null;
}
return LinkFieldNames;
}
public void enable(boolean _bdoenable)
{
CurUnoDialog.setStepEnabled(IStep.intValue(), _bdoenable);
}
class ItemListenerImpl implements com.sun.star.awt.XItemListener
{
public void itemStateChanged(ItemEvent EventObject)
{
int ikey = CurUnoDialog.getControlKey(EventObject.Source, CurUnoDialog.ControlList);
enableNextControlRow(ikey);
}
public void disposing(com.sun.star.lang.EventObject eventObject)
{
}
}
}