blob: c4b759791ee7d4f74d16e9eb1016fcb363b57c9c [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.ui;
import com.sun.star.wizards.common.*;
import com.sun.star.wizards.db.*;
// import com.sun.star.awt.XWindow;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.sdb.CommandType;
// import com.sun.star.sdbc.SQLException;
import com.sun.star.uno.AnyConverter;
// import com.sun.star.uno.UnoRuntime;
import com.sun.star.awt.*;
import com.sun.star.beans.PropertyValue;
import java.text.Collator;
import java.util.Comparator;
public class CommandFieldSelection extends FieldSelection implements Comparator
{
private CommandMetaData CurDBMetaData;
private XListBox xTableListBox;
private XFixedText xlblTable;
// private String SFILLUPFIELDSLISTBOX = "fillUpFieldsListbox";
private String sTableListBoxName;
private String sTableLabelName;
private String sQueryPrefix;
private String sTablePrefix;
private short m_iSelPos = -1;
private short iOldSelPos = -1;
private boolean bpreselectCommand = true;
private boolean bgetQueries;
// boolean AppendMode;
private WizardDialog oWizardDialog;
private Collator aCollator = null;
class ItemListenerImpl implements com.sun.star.awt.XItemListener
{
public void itemStateChanged(com.sun.star.awt.ItemEvent EventObject)
{
short[] SelItems = (short[]) CurUnoDialog.getControlProperty(sTableListBoxName, PropertyNames.SELECTED_ITEMS);
if (SelItems.length > 0)
{
iOldSelPos = m_iSelPos;
m_iSelPos = SelItems[0];
if ((m_iSelPos > -1) && (m_iSelPos != iOldSelPos))
{
if (!AppendMode)
{
oWizardDialog.enablefromStep(IStep.intValue() + 1, false);
}
fillUpFieldsListbox();
}
}
}
public void disposing(com.sun.star.lang.EventObject eventObject)
{
}
}
/**
* instantiates a CommandFieldSelection with a preselected command
* @param _CurUnoDialog
* @param _CurDBMetaData
* @param iStep
* @param _iHeight
* @param _reslblFields
* @param _reslblSelFields
* @param _reslblTables
* @param _bgetQueries
* @param _ifirstHID
*/
public CommandFieldSelection(WizardDialog _CurUnoDialog, CommandMetaData _CurDBMetaData, int iStep, int _iHeight, String _reslblFields, String _reslblSelFields, String _reslblTables, boolean _bgetQueries, int _ifirstHID)
{
super(_CurUnoDialog, iStep, 95, 57, 210, _iHeight, _reslblFields, _reslblSelFields, (_ifirstHID + 1), true);
insertControls(_CurDBMetaData, _bgetQueries, _reslblTables);
oWizardDialog = (WizardDialog) CurUnoDialog;
}
/**
* instantiates a CommandFieldSelection with a preselected command
* @param _CurUnoDialog
* @param _CurDBMetaData
* @param _iHeight
* @param _reslblFields
* @param _reslblSelFields
* @param _reslblTables
* @param _bgetQueries
* @param _ifirstHID
*/
public CommandFieldSelection(UnoDialog _CurUnoDialog, CommandMetaData _CurDBMetaData, int _iHeight, String _reslblFields, String _reslblSelFields, String _reslblTables, boolean _bgetQueries, int _ifirstHID)
{
super(_CurUnoDialog, 1, 95, 57, 210, _iHeight, _reslblFields, _reslblSelFields, (_ifirstHID + 1), true);
insertControls(_CurDBMetaData, _bgetQueries, _reslblTables);
oWizardDialog = (WizardDialog) CurUnoDialog;
}
private void insertControls(CommandMetaData _CurDBMetaData, boolean _bgetQueries, String _reslblTables)
{
try
{
this.AppendMode = !_bgetQueries;
this.bgetQueries = _bgetQueries;
this.CurDBMetaData = _CurDBMetaData;
toggleListboxControls(Boolean.FALSE);
sTableLabelName = "lblTables_" + super.sIncSuffix;
sTableListBoxName = "lstTables_" + super.sIncSuffix;
sTablePrefix = getTablePrefix();
sQueryPrefix = getQueryPrefix();
Integer LabelWidth = new Integer(getListboxWidth().intValue() + 6);
// Label 'Tables or Queries'
xlblTable = CurUnoDialog.insertLabel(sTableLabelName,
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, 8, _reslblTables, 95, 27, IStep, new Short((short) 3), LabelWidth
});
// DropDown Listbox TableNames
xTableListBox = CurUnoDialog.insertListBox(sTableListBoxName, 0, 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.FALSE, 12, HelpIds.getHelpIdString(super.FirstHelpIndex - 1), new Short(UnoDialog.getListBoxLineCount()), 95, 37, IStep, new Short((short) 4), getListboxWidth()
});
// XWindow xTableListBoxWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xTableListBox);
fillupCommandListBox();
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
/**
* @return Returns the sQueryPrefix.
*/
public String getQueryPrefix()
{
if (sQueryPrefix == null)
{
sQueryPrefix = CurUnoDialog.m_oResource.getResText(UIConsts.RID_QUERY + 22);
}
return sQueryPrefix;
}
private String getCommandPrefix(int _nCommandType)
{
if (_nCommandType == CommandType.TABLE)
{
return getTablePrefix();
}
else if (_nCommandType == CommandType.QUERY)
{
return getQueryPrefix();
}
else
{
return PropertyNames.EMPTY_STRING;
}
}
/**
* @return Returns the sTablePrefix.
*/
public String getTablePrefix()
{
if (sTablePrefix == null)
{
sTablePrefix = CurUnoDialog.m_oResource.getResText(UIConsts.RID_QUERY + 21);
}
return sTablePrefix;
}
private short getselectedItemPos()
{
short[] iSelPoses = ((short[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS));
if (iSelPoses.length > 0)
{
return iSelPoses[0];
}
else
{
if (this.bpreselectCommand)
{
String[] sItemList = ((String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.STRING_ITEM_LIST));
if (sItemList.length > 0)
{
return (short) 0;
}
}
return (short) -1;
}
}
public void fillUpFieldsListbox()
{
try
{
boolean binitialize = false;
String curCommandName = PropertyNames.EMPTY_STRING;
//As the peer of the control might not yet exist we have to query the model for the SelectedItems
short iSelPos = getselectedItemPos();
// String[] sLocList = (String[]) CurUnoDialog.getControlProperty(sTableListBoxName, PropertyNames.STRING_ITEM_LIST);
final String sSelectedTableName = xTableListBox.getItem(iSelPos);
if (!bgetQueries)
{
curCommandName = sSelectedTableName; // sLocList[iSelPos];
CurDBMetaData.setTableByName(curCommandName);
binitialize = CurDBMetaData.getFieldNamesOfCommand(curCommandName, CommandType.TABLE, AppendMode);
}
else
{
if (sSelectedTableName.startsWith(sTablePrefix))
{
CurDBMetaData.setCommandType(CommandType.TABLE);
curCommandName = JavaTools.replaceSubString(sSelectedTableName, PropertyNames.EMPTY_STRING, sTablePrefix);
CurDBMetaData.setTableByName(curCommandName);
binitialize = CurDBMetaData.getFieldNamesOfCommand(curCommandName, CommandType.TABLE, AppendMode);
}
else
{
CurDBMetaData.setCommandType(CommandType.QUERY);
curCommandName = JavaTools.replaceSubString(sSelectedTableName, PropertyNames.EMPTY_STRING, sQueryPrefix);
CurDBMetaData.setQueryByName(curCommandName);
binitialize = CurDBMetaData.getFieldNamesOfCommand(curCommandName, CommandType.QUERY, AppendMode);
}
}
if (binitialize)
{
CurDBMetaData.setCommandName(curCommandName);
if (CurDBMetaData.m_aAllFieldNames != null)
{
if (CurDBMetaData.m_aAllFieldNames.length > 0)
{
initialize(CurDBMetaData.m_aAllFieldNames, AppendMode, CurDBMetaData.getMaxColumnsInSelect());
return;
}
}
}
emptyFieldsListBoxes();
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
/** returns the selected entry index in the commandListbox
*
* @return
* @throws com.sun.star.wizards.common.TerminateWizardException
*/
private short fillupCommandListBox() throws com.sun.star.wizards.common.TerminateWizardException
{
short[] iSelArray = new short[0];
boolean bgetFields = false;
String[] ContentList = new String[0];
// CurDBMetaData.initCommandNames();
if (bgetQueries)
{
ContentList = new String[CurDBMetaData.getTableNames().length + CurDBMetaData.getQueryNames().length];
System.arraycopy(CurDBMetaData.getQueryNames(), 0, ContentList, CurDBMetaData.getTableNames().length, CurDBMetaData.getQueryNames().length);
ContentList = setPrefixinArray(ContentList, sQueryPrefix, CurDBMetaData.getTableNames().length, CurDBMetaData.getQueryNames().length);
}
else
{
ContentList = new String[CurDBMetaData.getTableNames().length];
}
System.arraycopy(CurDBMetaData.getTableNames(), 0, ContentList, 0, CurDBMetaData.getTableNames().length);
if (bgetQueries)
{
ContentList = setPrefixinArray(ContentList, sTablePrefix, 0, CurDBMetaData.getTableNames().length);
}
java.util.Arrays.sort(ContentList, this);
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.STRING_ITEM_LIST, ContentList);
short iSelPos = getselectedItemPos();
if (bpreselectCommand)
{
if (iSelPos > -1)
{
bgetFields = true;
iSelArray = new short[]
{
iSelPos
};
}
}
else
{
emptyFieldsListBoxes();
iSelArray = new short[] {iSelPos};
}
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS, iSelArray);
toggleCommandListBox(true);
if (bgetFields)
{
fillUpFieldsListbox();
}
return iSelPos;
}
private Collator getCollator()
{
if (this.aCollator == null)
{
com.sun.star.lang.Locale aOfficeLocale = Configuration.getOfficeLocale(this.CurDBMetaData.xMSF);
java.util.Locale aJavaLocale = new java.util.Locale(aOfficeLocale.Language, aOfficeLocale.Country, aOfficeLocale.Variant);
//Get the Collator for US English and set its strength to PRIMARY
this.aCollator = Collator.getInstance(aJavaLocale);
aCollator.setStrength(Collator.TERTIARY);
}
return aCollator;
}
public int compare(Object _oObject1, Object _oObject2)
{
return this.getCollator().compare(_oObject1, _oObject2);
}
private String[] setPrefixinArray(String[] _ContentList, String _sprefix, int _startindex, int _nlen)
{
for (int i = _startindex; i < _startindex + _nlen; i++)
{
_ContentList[i] = _sprefix + _ContentList[i];
}
return _ContentList;
}
public void toggleCommandListBox(String[] _NewItems)
{
boolean bdoenable = !(QueryMetaData.getIncludedCommandNames(_NewItems).length >= CurDBMetaData.getMaxTablesInSelect());
toggleCommandListBox(bdoenable);
}
public void toggleCommandListBox(boolean _bdoenable)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoenable));
Helper.setUnoPropertyValue(UnoDialog.getModel(xlblTable), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoenable));
}
public String getSelectedCommandName()
{
String sCommandname = xTableListBox.getSelectedItem();
if (sCommandname.startsWith(this.sTablePrefix))
{
return sCommandname.substring(sTablePrefix.length());
}
else if ((sCommandname.startsWith(this.sQueryPrefix)))
{
return sCommandname.substring(sQueryPrefix.length());
}
else
{
return sCommandname;
}
}
public int getSelectedCommandType()
{
String sCommandname = xTableListBox.getSelectedItem();
if (sCommandname.startsWith(this.sTablePrefix))
{
return CommandType.TABLE;
}
else
{
return CommandType.QUERY;
}
}
public void preselectCommand(PropertyValue[] _aPropertyValue, boolean _bReadOnly)
{
try
{
if (Properties.hasPropertyValue(_aPropertyValue, PropertyNames.COMMAND_TYPE))
{
int nCommandType = AnyConverter.toInt(Properties.getPropertyValue(_aPropertyValue, PropertyNames.COMMAND_TYPE));
String sCommand = AnyConverter.toString(Properties.getPropertyValue(_aPropertyValue, PropertyNames.COMMAND));
if (sCommand != null)
{
preselectCommand(sCommand, nCommandType, _bReadOnly);
}
}
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
}
public void preselectCommand(String _selitem, int _nCommandType, boolean _bReadOnly)
{
if (_selitem.length() > 0)
{
String[] sitems = (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.STRING_ITEM_LIST);
String sPrefix = getCommandPrefix(_nCommandType);
short iselpos = (short) JavaTools.FieldInList(sitems, sPrefix + _selitem);
if (iselpos > -1)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS, new short[]
{
iselpos
});
}
this.fillUpFieldsListbox();
}
else
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS, new short[]
{
});
}
if (_bReadOnly)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.READ_ONLY, Boolean.valueOf(_selitem.length() > 0));
}
}
public void preselectCommand(String _selitem, boolean _bReadOnly)
{
if (_selitem.length() > 0)
{
String[] sitems = (String[]) Helper.getUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.STRING_ITEM_LIST);
short iselpos = (short) JavaTools.FieldInList(sitems, getTablePrefix() + _selitem);
if (iselpos > -1)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS, new short[] { iselpos });
}
this.fillUpFieldsListbox();
}
else
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.SELECTED_ITEMS, new short[] {} );
this.fillUpFieldsListbox();
}
if (_bReadOnly)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(xTableListBox), PropertyNames.READ_ONLY, Boolean.valueOf(_selitem.length() > 0));
}
toggleListboxButtons((short)-1,(short)-1);
}
}