blob: cd6b0f9451661d07c3b14dd9837f16ab47c0faea [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 java.util.Vector;
import com.sun.star.awt.TextEvent;
import com.sun.star.awt.VclWindowPeerAttribute;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XListBox;
import com.sun.star.awt.XRadioButton;
import com.sun.star.beans.PropertyAttribute;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertyContainer;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.EventObject;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.sdb.SQLFilterOperator;
import com.sun.star.sdbc.DataType;
import com.sun.star.uno.Any;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.Exception;
import com.sun.star.uno.Type;
import com.sun.star.uno.TypeClass;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XInterface;
import com.sun.star.wizards.common.NumberFormatter;
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.common.PropertyNames;
import com.sun.star.wizards.db.FieldColumn;
import com.sun.star.wizards.db.QueryMetaData;
import com.sun.star.wizards.db.SQLQueryComposer;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FilterComponent
{
private Integer IStep;
private int RowCount;
private static String[] sLogicOperators;
private XRadioButton optMatchAny;
private String slblFieldNames;
private String slblOperators;
private String slblValue;
WizardDialog CurUnoDialog;
private int BaseID = 2300;
private String sIncSuffix;
private ControlRow[] oControlRows;
private String sDuplicateCondition;
final int SOOPTORMODE = 100;
final int SOOPTANDMODE = 101;
QueryMetaData oQueryMetaData;
int iDateTimeFormat;
int iDateFormat;
int iTimeFormat;
private PropertyValue[][] filterconditions;
private short curtabindex;
XMultiServiceFactory xMSF;
final int SO_FIRSTFIELDNAME = 1;
final int SO_SECONDFIELDNAME = 2;
final int SO_THIRDFIELDNAME = 3;
final int SO_FOURTHFIELDNAME = 4;
int[] SO_FIELDNAMELIST = new int[]
{
SO_FIRSTFIELDNAME, SO_SECONDFIELDNAME, SO_THIRDFIELDNAME, SO_FOURTHFIELDNAME
};
final int SO_FIRSTCONDITION = 5;
final int SO_SECONDCONDITION = 6;
final int SO_THIRDCONDITION = 7;
final int SO_FOURTHCONDITION = 8;
int[] SO_CONDITIONLIST = new int[]
{
SO_FIRSTCONDITION, SO_SECONDCONDITION, SO_THIRDCONDITION, SO_FOURTHCONDITION
};
final int SO_FIRSTTEXTFIELD = 1;
final int SO_SECONDTEXTFIELD = 2;
final int SO_THIRDTEXTFIELD = 3;
final int SO_FOURTHTEXTFIELD = 4;
int[] SO_TEXTFIELDLIST = new int[]
{
SO_FIRSTTEXTFIELD, SO_SECONDTEXTFIELD, SO_THIRDTEXTFIELD, SO_FOURTHTEXTFIELD
};
final int SO_FIRSTBOOLFIELDNAME = 256 + 1;
final int SO_SECONDBOOLFIELDNAME = 256 + 2;
final int SO_THIRDBOOLFIELDNAME = 256 + 3;
final int SO_FOURTHBOOLFIELDNAME = 256 + 4;
int SO_BOOLEANLIST[] =
{
SO_FIRSTBOOLFIELDNAME, SO_SECONDBOOLFIELDNAME, SO_THIRDBOOLFIELDNAME, SO_FOURTHBOOLFIELDNAME
};
final int SO_OPTQUERYMODE = 5;
int SOI_MATCHALL = 0;
int SOI_MATCHANY = 1;
int curHelpID;
class ItemListenerImpl implements com.sun.star.awt.XItemListener
{
public void itemStateChanged(com.sun.star.awt.ItemEvent EventObject)
{
int iKey = CurUnoDialog.getControlKey(EventObject.Source, CurUnoDialog.ControlList);
String sControlName = PropertyNames.EMPTY_STRING;
switch (iKey)
{
case SO_FIRSTFIELDNAME:
case SO_SECONDFIELDNAME:
case SO_THIRDFIELDNAME:
case SO_FOURTHFIELDNAME:
sControlName = getControlName(EventObject.Source);
String sControlNameSuffix = sIncSuffix + "_" + getIndexNumber(sControlName);
XListBox xCurFieldListBox = UnoRuntime.queryInterface(XListBox.class, CurUnoDialog.xDlgContainer.getControl(sControlName));
String CurDisplayFieldName = xCurFieldListBox.getSelectedItem();
FieldColumn CurFieldColumn = new FieldColumn(oQueryMetaData, CurDisplayFieldName);
String sControlNameTextValue = "txtValue" + sControlNameSuffix;
XControl xValueControl = CurUnoDialog.xDlgContainer.getControl(sControlNameTextValue);
XInterface xValueModel = (XInterface) UnoDialog.getModel(xValueControl);
Helper.setUnoPropertyValue(xValueModel, "TreatAsNumber", Boolean.valueOf(CurFieldColumn.isNumberFormat()));
final NumberFormatter aNumberFormatter = oQueryMetaData.getNumberFormatter();
aNumberFormatter.setNumberFormat(xValueModel, CurFieldColumn.getDBFormatKey(), aNumberFormatter);
break;
case SO_FIRSTCONDITION:
case SO_SECONDCONDITION:
case SO_THIRDCONDITION:
case SO_FOURTHCONDITION:
sControlName = getControlName(EventObject.Source);
break;
case SOOPTORMODE:
case SOOPTANDMODE:
return;
case SO_FIRSTBOOLFIELDNAME:
case SO_SECONDBOOLFIELDNAME:
case SO_THIRDBOOLFIELDNAME:
case SO_FOURTHBOOLFIELDNAME:
sControlName = getControlName(EventObject.Source);
break;
default:
break;
}
togglefollowingControlRow(sControlName);
}
public void disposing(com.sun.star.lang.EventObject eventObject)
{
}
}
class TextListenerImpl implements com.sun.star.awt.XTextListener
{
public void textChanged(TextEvent EventObject)
{
String sName = getControlName(EventObject.Source);
togglefollowingControlRow(sName);
}
public void disposing(EventObject eventObject)
{
}
public void actionPerformed(com.sun.star.awt.ActionEvent actionEvent)
{
getfilterstate();
}
}
public static String getIndexNumber(String _sStr)
{
return _sStr.substring(_sStr.length() - 1, _sStr.length());
}
/**
* Enable the next ControlRow if the Condition is complete in the current line
*
* @param _scurName every control name ends with something like _1, _2, _3 this is the index number
* we try to interpret to check which line we currently use. (number - 1)
*/
private void togglefollowingControlRow(String _scurName)
{
// String sNameSuffix = sIncSuffix + "_" + _scurName.substring(_scurName.length() - 1, _scurName.length());
int Index = Integer.valueOf(getIndexNumber(_scurName)).intValue();
if (Index < oControlRows.length)
{
boolean bValue = oControlRows[Index - 1].isConditionComplete();
oControlRows[Index].setEnabled(bValue);
}
}
private String getControlName(Object _oSourceevent)
{
try
{
XControl xControl = UnoRuntime.queryInterface(XControl.class, _oSourceevent);
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel());
return AnyConverter.toString(xPSet.getPropertyValue(PropertyNames.PROPERTY_NAME));
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
return PropertyNames.EMPTY_STRING;
}
public PropertyValue[][] getFilterConditions()
{
// ControlRow CurControlRow;
// getfilterstate();
int nFilterCount = getFilterCount();
if (nFilterCount > 0)
{
final SQLQueryComposer composer = oQueryMetaData.getSQLQueryComposer();
try
{
final String serviceName = "com.sun.star.beans.PropertyBag";
final XPropertyContainer column = UnoRuntime.queryInterface(XPropertyContainer.class, oQueryMetaData.xMSF.createInstance(serviceName));
column.addProperty("Type", PropertyAttribute.BOUND, DataType.VARCHAR);
column.addProperty(PropertyNames.PROPERTY_NAME, PropertyAttribute.BOUND, PropertyNames.EMPTY_STRING);
column.addProperty("Value", (short) (PropertyAttribute.MAYBEVOID | PropertyAttribute.REMOVABLE), null);
final XPropertySet columnSet = UnoRuntime.queryInterface(XPropertySet.class, column);
if (composer.getQuery().length() == 0)
{
StringBuilder sql = new StringBuilder();
sql.append(composer.getSelectClause(true));
sql.append(' ');
sql.append(composer.getFromClause());
composer.getQueryComposer().setElementaryQuery(sql.toString());
}
composer.getQueryComposer().setStructuredFilter(new PropertyValue[][]
{
});
for (int i = 0; i < RowCount; i++)
{
ControlRow currentControlRow = oControlRows[i];
if (currentControlRow.isEnabled() && currentControlRow.isConditionComplete())
{
String sFieldName = currentControlRow.getSelectedFieldName();
int nOperator = (int) currentControlRow.getSelectedOperator();
FieldColumn aFieldColumn = oQueryMetaData.getFieldColumnByDisplayName(sFieldName);
columnSet.setPropertyValue(PropertyNames.PROPERTY_NAME, aFieldColumn.getFieldName());
columnSet.setPropertyValue("Type", aFieldColumn.getXColumnPropertySet().getPropertyValue("Type"));
Object value = currentControlRow.getValue();
switch (aFieldColumn.getFieldType())
{
case DataType.TIMESTAMP:
case DataType.DATE:
value = ((Double) value) - oQueryMetaData.getNullDateCorrection();
break;
}
column.removeProperty("Value");
final short operator = currentControlRow.getSelectedOperator();
if ((operator == SQLFilterOperator.SQLNULL)
|| (operator == SQLFilterOperator.NOT_SQLNULL)
|| AnyConverter.isVoid(value))
{
column.addProperty("Value", (short) (PropertyAttribute.MAYBEVOID | PropertyAttribute.REMOVABLE), "");
value = new Any(new Type(TypeClass.VOID), null);
}
else
{
column.addProperty("Value", (short) (PropertyAttribute.MAYBEVOID | PropertyAttribute.REMOVABLE), value);
}
columnSet.setPropertyValue("Value", value);
composer.getQueryComposer().appendFilterByColumn(columnSet, getfilterstate() == this.SOI_MATCHALL, nOperator);
}
}
filterconditions = composer.getNormalizedStructuredFilter();
int[] iduplicate = JavaTools.getDuplicateFieldIndex(filterconditions);
if (iduplicate[0] != -1)
{
PropertyValue aduplicatecondition = filterconditions[iduplicate[0]][iduplicate[1]];
String smsgDuplicateCondition = getDisplayCondition(sDuplicateCondition, aduplicatecondition, null);
CurUnoDialog.showMessageBox("WarningBox", VclWindowPeerAttribute.OK, smsgDuplicateCondition);
CurUnoDialog.vetoableChange(new java.beans.PropertyChangeEvent(CurUnoDialog, "Steps", Integer.valueOf(1), Integer.valueOf(2)));
return new PropertyValue[][]
{
};
}
}
catch (Exception ex)
{
Logger.getLogger(FilterComponent.class.getName()).log(Level.SEVERE, null, ex);
}
}
else
{
filterconditions = new PropertyValue[0][0];
}
return filterconditions;
}
public static String getDisplayCondition(String _BaseString, PropertyValue _filtercondition, QueryMetaData _CurDBMetaData)
{
try
{
String FieldName;
if (_CurDBMetaData != null)
{
FieldColumn CurDBFieldColumn = _CurDBMetaData.getFieldColumnByDisplayName(_filtercondition.Name);
FieldName = CurDBFieldColumn.getFieldTitle();
}
else
{
FieldName = _filtercondition.Name;
}
String sreturn = JavaTools.replaceSubString(_BaseString, FieldName, "<FIELDNAME>");
String soperator = sLogicOperators[_filtercondition.Handle - 1];
sreturn = JavaTools.replaceSubString(sreturn, soperator, "<LOGICOPERATOR>");
String sDisplayValue = PropertyNames.EMPTY_STRING;
if ((_filtercondition.Handle != SQLFilterOperator.SQLNULL)
&& (_filtercondition.Handle != SQLFilterOperator.NOT_SQLNULL)
&& !AnyConverter.isVoid(_filtercondition.Value))
{
sDisplayValue = AnyConverter.toString(_filtercondition.Value);
}
sreturn = JavaTools.replaceSubString(sreturn, sDisplayValue, "<VALUE>");
return sreturn;
}
catch (IllegalArgumentException e)
{
e.printStackTrace(System.out);
}
return PropertyNames.EMPTY_STRING;
}
private int getfilterstate()
{
boolean bisany = true;
int ifilterstate = SOI_MATCHALL;
bisany = (this.optMatchAny.getState());
if (bisany)
{
ifilterstate = SOI_MATCHANY;
}
else
{
ifilterstate = SOI_MATCHALL;
}
return ifilterstate;
}
private int getFilterCount()
{
int a = 0;
for (int i = 0; i < RowCount; i++)
{
if (oControlRows[i].isEnabled() && oControlRows[i].isConditionComplete())
{
a++;
}
}
return a;
}
/** Creates a new instance of FilterComponent
* @param CurUnoDialog
* @param _xMSF
* @param iStep
* @param iPosX
* @param iPosY
* @param iWidth
* @param FilterCount
* @param _oQueryMetaData
* @param _firstHelpID
*/
public FilterComponent(WizardDialog CurUnoDialog, XMultiServiceFactory _xMSF, int iStep, int iPosX, int iPosY, int iWidth, int FilterCount, QueryMetaData _oQueryMetaData, int _firstHelpID)
{
this.curHelpID = _firstHelpID;
this.xMSF = _xMSF;
this.IStep = Integer.valueOf(iStep);
curtabindex = UnoDialog.setInitialTabindex(iStep);
this.CurUnoDialog = CurUnoDialog;
this.RowCount = FilterCount;
this.oQueryMetaData = _oQueryMetaData;
boolean bEnabled;
sIncSuffix = com.sun.star.wizards.common.Desktop.getIncrementSuffix(CurUnoDialog.getDlgNameAccess(), "optMatchAll");
String soptMatchAll = CurUnoDialog.m_oResource.getResText(BaseID + 9);
String soptMatchAny = CurUnoDialog.m_oResource.getResText(BaseID + 10);
slblFieldNames = CurUnoDialog.m_oResource.getResText(BaseID + 17);
slblOperators = CurUnoDialog.m_oResource.getResText(BaseID + 24);
slblValue = CurUnoDialog.m_oResource.getResText(BaseID + 25);
sLogicOperators = CurUnoDialog.m_oResource.getResArray(BaseID + 26, 10 /* 7 */); // =, <>, <, >, <=, >=, like, !like, is null, !is null
sDuplicateCondition = CurUnoDialog.m_oResource.getResText(BaseID + 89);
// create Radiobuttons
// * match all
// * match one
CurUnoDialog.insertRadioButton("optMatchAll" + sIncSuffix, SOOPTANDMODE, new ItemListenerImpl(),
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[]
{
Integer.valueOf(9),
HelpIds.getHelpIdString(curHelpID++),
soptMatchAll,
Integer.valueOf(iPosX),
Integer.valueOf(iPosY),
Short.valueOf((short) 1),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(203)
});
optMatchAny = CurUnoDialog.insertRadioButton("optMatchAny" + sIncSuffix, SOOPTORMODE, new ItemListenerImpl(),
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[]
{
Integer.valueOf(9),
HelpIds.getHelpIdString(curHelpID++),
soptMatchAny,
Integer.valueOf(iPosX),
Integer.valueOf(iPosY + 12),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(203)
});
getfilterstate();
oControlRows = new ControlRow[FilterCount];
for (int i = 0; i < FilterCount; i++)
{
bEnabled = (i == 0);
oControlRows[i] = new ControlRow(iPosX, iPosY + 20, i, bEnabled, (this.curHelpID + (i * 3)));
iPosY += 43;
}
}
public void initialize(PropertyValue[][] _filterconditions, String[] _fieldnames)
{
int i;
for (i = 0; i < RowCount; i++)
{
oControlRows[i].setFieldNames(_fieldnames);
// oControlRows[i].setFieldNames(aFieldNamesWithAdditionalEmpty);
}
this.filterconditions = _filterconditions;
PropertyValue[] curfilterconditions;
// int a;
if (_filterconditions.length == 1)
{
curfilterconditions = filterconditions[0];
for (i = 0; i < curfilterconditions.length; i++)
{
oControlRows[i].setCondition(filterconditions[0][i]);
}
}
else
{
for (i = 0; i < filterconditions.length; i++)
{
oControlRows[i].setCondition(filterconditions[i][0]);
}
}
while (i < oControlRows.length)
{
oControlRows[i].settovoid();
boolean bdoenable;
if (i > 0)
{
bdoenable = oControlRows[i - 1].isConditionComplete();
}
else
{
bdoenable = true;
}
oControlRows[i].setEnabled(bdoenable);
i++;
}
}
public void addNumberFormats()
{
iDateFormat = oQueryMetaData.getNumberFormatter().defineNumberFormat("YYYY-MM-DD");
iTimeFormat = oQueryMetaData.getNumberFormatter().defineNumberFormat("HH:MM:SS");
iDateTimeFormat = oQueryMetaData.getNumberFormatter().defineNumberFormat("YYYY-MM-DD HH:MM:SS");
}
// -------------------------------------------------------------------------
//
//
// -------------------------------------------------------------------------
final class ControlRow
{
private final static int SOLSTFIELDNAME = 3;
private final static int SOLSTOPERATOR = 4;
private final static int SOTXTVALUE = 5;
protected XInterface[] ControlElements = new XInterface[6];
private boolean m_bEnabled;
String[] FieldNames;
protected ControlRow(int iCompPosX, int iCompPosY, int Index, boolean _bEnabled, int _firstRowHelpID)
{
int nFieldWidth = 71;
int nOperatorWidth = 70;
int nValueWidth = 44;
int nPosX1 = iCompPosX + 10;
int nPosX2 = iCompPosX + 10 + nFieldWidth + 6; // 87
int nPosX3 = iCompPosX + 10 + nFieldWidth + 6 + nOperatorWidth + 6;
try
{
String sCompSuffix = sIncSuffix + "_" + String.valueOf(Index + 1);
m_bEnabled = _bEnabled;
// Label Field
ControlElements[0] = CurUnoDialog.insertLabel("lblFieldNames" + sCompSuffix,
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(isEnabled()),
Integer.valueOf(9),
slblFieldNames,
Integer.valueOf(nPosX1),
Integer.valueOf(iCompPosY + 13),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(nFieldWidth)
});
// Label Operator
ControlElements[1] = CurUnoDialog.insertLabel("lblOperators" + sCompSuffix,
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(isEnabled()),
Integer.valueOf(9),
slblOperators,
Integer.valueOf(nPosX2),
Integer.valueOf(iCompPosY + 13),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(nOperatorWidth)
});
// Label Value
ControlElements[2] = CurUnoDialog.insertLabel("lblValue" + sCompSuffix,
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(isEnabled()),
Integer.valueOf(9),
slblValue,
Integer.valueOf(nPosX3),
Integer.valueOf(iCompPosY + 13),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(nValueWidth)
});
// Listbox Fields
ControlElements[SOLSTFIELDNAME] = CurUnoDialog.insertListBox("lstFieldName" + sCompSuffix, SO_FIELDNAMELIST[Index], null, new ItemListenerImpl(),
new String[]
{
PropertyNames.PROPERTY_ENABLED,
"Dropdown",
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.valueOf(isEnabled()),
Boolean.TRUE,
Integer.valueOf(13),
HelpIds.getHelpIdString(_firstRowHelpID++),
Short.valueOf(UnoDialog.getListBoxLineCount() /* 7 */),
Integer.valueOf(nPosX1),
Integer.valueOf(iCompPosY + 23),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(nFieldWidth)
});
// Listbox Operators
ControlElements[SOLSTOPERATOR] = CurUnoDialog.insertListBox("lstOperator" + sCompSuffix, SO_CONDITIONLIST[Index], null, new ItemListenerImpl(),
new String[]
{
PropertyNames.PROPERTY_ENABLED,
"Dropdown",
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL,
"LineCount",
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
PropertyNames.STRING_ITEM_LIST,
PropertyNames.PROPERTY_TABINDEX,
PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.valueOf(isEnabled()),
Boolean.TRUE,
Integer.valueOf(13),
HelpIds.getHelpIdString(_firstRowHelpID++),
Short.valueOf((short) sLogicOperators.length /* 7 */),
Integer.valueOf(nPosX2),
Integer.valueOf(iCompPosY + 23),
IStep,
sLogicOperators,
Short.valueOf(curtabindex++),
Integer.valueOf(nOperatorWidth)
});
ControlElements[SOTXTVALUE] = CurUnoDialog.insertFormattedField("txtValue" + sCompSuffix, SO_TEXTFIELDLIST[Index], new TextListenerImpl(),
new String[]
{
PropertyNames.PROPERTY_ENABLED,
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL,
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
PropertyNames.PROPERTY_TABINDEX,
PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
Boolean.valueOf(isEnabled()),
Integer.valueOf(13),
HelpIds.getHelpIdString(_firstRowHelpID++),
Integer.valueOf(nPosX3),
Integer.valueOf(iCompPosY + 23),
IStep,
Short.valueOf(curtabindex++),
Integer.valueOf(nValueWidth)
});
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
/**
* @returns true if the current condition is complete, all needed fields are filled with values.
* So we can enable the next.
*/
boolean isConditionComplete()
{
try
{
short[] SelFields = (short[]) AnyConverter.toArray(Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTFIELDNAME]), PropertyNames.SELECTED_ITEMS));
if (SelFields.length > 0)
{
int nSelOperator = getSelectedOperator();
// short[] SelOperator = (short[]) AnyConverter.toArray(Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTOPERATOR]), PropertyNames.SELECTED_ITEMS));
if (nSelOperator == com.sun.star.sdb.SQLFilterOperator.SQLNULL
|| /* is null */ nSelOperator == com.sun.star.sdb.SQLFilterOperator.NOT_SQLNULL) /* is not null */
{
// disable value field
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[2]), PropertyNames.PROPERTY_ENABLED, Boolean.FALSE);
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), PropertyNames.PROPERTY_ENABLED, Boolean.FALSE);
return true;
}
else
{
// enable value field
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[2]), PropertyNames.PROPERTY_ENABLED, Boolean.TRUE);
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), PropertyNames.PROPERTY_ENABLED, Boolean.TRUE);
}
if (nSelOperator != -1)
{
Object oValue = Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "EffectiveValue");
if (!AnyConverter.isVoid(oValue))
{
String sValue = (String.valueOf(oValue));
return (!sValue.equals(PropertyNames.EMPTY_STRING));
}
}
}
return false;
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return false;
}
}
protected void setCondition(PropertyValue _filtercondition)
{
try
{
XListBox xFieldsListBox = UnoRuntime.queryInterface(XListBox.class, ControlElements[SOLSTFIELDNAME]);
xFieldsListBox.selectItem(_filtercondition.Name, true);
XListBox xOperatorListBox = UnoRuntime.queryInterface(XListBox.class, ControlElements[SOLSTOPERATOR]);
xOperatorListBox.selectItemPos((short) (_filtercondition.Handle - 1), true);
if (AnyConverter.isString(_filtercondition.Value))
{
String sValue = AnyConverter.toString(_filtercondition.Value);
if (sValue.indexOf("{D '") > -1)
{
sValue = JavaTools.replaceSubString(sValue, PropertyNames.EMPTY_STRING, "{D '");
sValue = JavaTools.replaceSubString(sValue, PropertyNames.EMPTY_STRING, "' }");
try
{
oQueryMetaData.getNumberFormatter().convertStringToNumber(iDateFormat, sValue);
}
catch (java.lang.Exception ex)
{
Logger.getLogger(FilterComponent.class.getName()).log(Level.SEVERE, null, ex);
}
}
else if (sValue.indexOf("{T '") > -1)
{
sValue = JavaTools.replaceSubString(sValue, PropertyNames.EMPTY_STRING, "{T '");
sValue = JavaTools.replaceSubString(sValue, PropertyNames.EMPTY_STRING, "' }");
try
{
oQueryMetaData.getNumberFormatter().convertStringToNumber(iTimeFormat, sValue);
}
catch (java.lang.Exception ex)
{
Logger.getLogger(FilterComponent.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
else if (AnyConverter.isBoolean(_filtercondition.Value))
{
boolean b = AnyConverter.toBoolean(_filtercondition.Value);
double nValue = 0.0;
if (b)
{
nValue = 1.0;
}
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "EffectiveValue", nValue);
}
else
{
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "EffectiveValue", _filtercondition.Value);
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
protected void setFieldNames(String[] _FieldNames)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTFIELDNAME]), PropertyNames.STRING_ITEM_LIST, _FieldNames);
FieldNames = _FieldNames;
}
protected boolean isEnabled()
{
return m_bEnabled;
}
private void settovoid()
{
WizardDialog.deselectListBox(ControlElements[SOLSTFIELDNAME]);
WizardDialog.deselectListBox(ControlElements[SOLSTOPERATOR]);
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "EffectiveValue", com.sun.star.uno.Any.VOID);
}
private void setEnabled(boolean _bEnabled)
{
// enable all Controls Fieldname, operator, value
for (int i = 0; i < ControlElements.length; i++)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[i]), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bEnabled));
}
m_bEnabled = _bEnabled;
if (isEnabled())
{
short[] iselected = new short[]
{
};
try
{
iselected = (short[]) AnyConverter.toArray(Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTOPERATOR]), PropertyNames.SELECTED_ITEMS));
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
if ((iselected.length) == 0)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTOPERATOR]), PropertyNames.SELECTED_ITEMS, new short[]
{
0
});
}
}
else if (!isConditionComplete())
{
WizardDialog.deselectListBox(ControlElements[SOLSTOPERATOR]);
}
}
protected String getSelectedFieldName()
{
try
{
short[] SelFields = (short[]) AnyConverter.toArray(Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTFIELDNAME]), PropertyNames.SELECTED_ITEMS));
return FieldNames[SelFields[0]];
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
return null;
}
// TODO: check if it is really useful to match the indices of the listbox the API constants
// =, <>, <, >, <=, >=, like, !like, is null, !is null
protected short getSelectedOperator()
{
try
{
short[] SelFields = (short[]) AnyConverter.toArray(Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOLSTOPERATOR]), PropertyNames.SELECTED_ITEMS));
switch (SelFields[0])
{
case 0:
return com.sun.star.sdb.SQLFilterOperator.EQUAL;
case 1:
return com.sun.star.sdb.SQLFilterOperator.NOT_EQUAL;
case 2:
return com.sun.star.sdb.SQLFilterOperator.LESS;
case 3:
return com.sun.star.sdb.SQLFilterOperator.GREATER;
case 4:
return com.sun.star.sdb.SQLFilterOperator.LESS_EQUAL;
case 5:
return com.sun.star.sdb.SQLFilterOperator.GREATER_EQUAL;
case 6:
return com.sun.star.sdb.SQLFilterOperator.LIKE;
case 7:
return com.sun.star.sdb.SQLFilterOperator.NOT_LIKE;
case 8:
return com.sun.star.sdb.SQLFilterOperator.SQLNULL;
case 9:
return com.sun.star.sdb.SQLFilterOperator.NOT_SQLNULL;
default:
return -1;
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
return -1;
}
// TODO make a difference between Text and Numbers
protected Object getValue()
{
return (Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "EffectiveValue"));
}
protected Object getText()
{
return (Helper.getUnoPropertyValue(UnoDialog.getModel(ControlElements[SOTXTVALUE]), "Text"));
}
protected String getDateTimeString(boolean bgetDate)
{
double dblValue = ((Double) getValue()).doubleValue();
NumberFormatter oNumberFormatter = oQueryMetaData.getNumberFormatter();
return oNumberFormatter.convertNumberToString(iDateTimeFormat, dblValue);
}
}
}