summaryrefslogtreecommitdiff
path: root/wizards/com/sun/star/wizards/ui/AggregateComponent.java
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/com/sun/star/wizards/ui/AggregateComponent.java')
-rw-r--r--wizards/com/sun/star/wizards/ui/AggregateComponent.java610
1 files changed, 610 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/ui/AggregateComponent.java b/wizards/com/sun/star/wizards/ui/AggregateComponent.java
new file mode 100644
index 000000000000..f59d06772a83
--- /dev/null
+++ b/wizards/com/sun/star/wizards/ui/AggregateComponent.java
@@ -0,0 +1,610 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package com.sun.star.wizards.ui;
+
+import java.util.Vector;
+import com.sun.star.wizards.common.*;
+import com.sun.star.wizards.db.*;
+import com.sun.star.lang.EventObject;
+import com.sun.star.beans.*;
+import com.sun.star.sdbc.SQLException;
+import com.sun.star.uno.AnyConverter;
+
+import com.sun.star.awt.*;
+
+public class AggregateComponent extends ControlScroller
+{
+
+ String[] sFunctions;
+ String[] sFunctionOperators = new String[]
+ {
+ "SUM", "AVG", "MIN", "MAX"
+ };
+ ;
+ QueryMetaData CurDBMetaData;
+ XButton optDetailQuery;
+ XButton optSummaryQuery;
+ String soptDetailQuery;
+ String soptSummaryQuery;
+ String slblAggregate;
+ String slblFieldNames;
+ String sDuplicateAggregateFunction;
+ int Count;
+ int iQueryType;
+ final int SOADDROW = 1;
+ final int SOREMOVEROW = 2;
+ final int CONTROLROWDIST = 18;
+ Vector ControlRowVector;
+ String OPTIONBUTTONDETAILQUERY_ITEM_CHANGED = "toggleComponent";
+ String OPTIONBUTTONSUMMARYQUERY_ITEM_CHANGED = "toggleComponent";
+ String LISTBOXFUNCTIONS_ACTION_PERFORMED;
+ String LISTBOXFUNCTIONS_ITEM_CHANGED;
+ String LISTBOXFIELDNAMES_ACTION_PERFORMED;
+ String LISTBOXFIELDNAMES_ITEM_CHANGED;
+ String COMMANDBUTTONPLUS_ACTION_PERFORMED = "addRow";
+ String COMMANDBUTTONMINUS_ACTION_PERFORMED = "removeRow";
+ Vector ControlRows;
+ int curHelpID;
+ int lastHelpIndex;
+
+ /** Creates a new instance of AggrgateComponent */
+ public AggregateComponent(WizardDialog _CurUnoDialog, QueryMetaData _CurDBMetaData, int _iStep, int _iPosX, int _iPosY, int _iWidth, int _uitextfieldcount, int _firstHelpID)
+ {
+ super(_CurUnoDialog, _CurDBMetaData.xMSF, _iStep, _iPosX + 10, _iPosY, _iWidth - 12, _uitextfieldcount, 18, _firstHelpID + 2);
+ try
+ {
+ curHelpID = _firstHelpID;
+ this.CurDBMetaData = _CurDBMetaData;
+ ;
+ Count = 1;
+ optDetailQuery = CurUnoDialog.insertRadioButton("optDetailQuery", 0, new ActionListenerImpl(),
+ new String[]
+ {
+ "Height", "HelpURL", "Label", "PositionX", "PositionY", "State", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ new Integer(8), HelpIds.getHelpIdString(curHelpID), soptDetailQuery, new Integer(_iPosX), new Integer(iCompPosY - 42), new Short((short) 1), IStep, new Short(curtabindex++), new Integer(iCompWidth)
+ });
+
+ optSummaryQuery = CurUnoDialog.insertRadioButton("optSummaryQuery", 0, new ActionListenerImpl(),
+ new String[]
+ {
+ "Height", "HelpURL", "Label", "MultiLine", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ new Integer(16), HelpIds.getHelpIdString(curHelpID + 1), soptSummaryQuery, Boolean.TRUE, new Integer(_iPosX), new Integer(iCompPosY - 32), IStep, new Short(curtabindex++), new Integer(iCompWidth)
+ });
+ CurUnoDialog.insertLabel("lblAggregate",
+ new String[]
+ {
+ "Height", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ new Integer(8), slblAggregate, new Integer(iCompPosX + 5), new Integer(iCompPosY - 10), IStep, new Short(curtabindex++), new Integer(90)
+ });
+ CurUnoDialog.insertLabel("lblFieldnames",
+ new String[]
+ {
+ "Height", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ new Integer(8), slblFieldNames, new Integer(iCompPosX + 101), new Integer(iCompPosY - 10), IStep, new Short(curtabindex++), new Integer(90)
+ });
+ this.setTotalFieldCount(1);
+ FontDescriptor oFontDescriptor = new FontDescriptor();
+ oFontDescriptor.Weight = com.sun.star.awt.FontWeight.BOLD;
+ oFontDescriptor.Height = (short) 14;
+
+ int iButtonPosY = iCompPosY + iCompHeight + 3;
+ CurUnoDialog.insertButton("btnplus", SOADDROW, new ActionListenerImpl(),
+ new String[]
+ {
+ "FontDescriptor", "Height", "HelpURL", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ oFontDescriptor, new Integer(14), HelpIds.getHelpIdString(lastHelpIndex + 1), "+", new Integer(_iPosX + iCompWidth - 36), new Integer(iButtonPosY), IStep, new Short((curtabindex++)), new Integer(16)
+ });
+ CurUnoDialog.insertButton("btnminus", SOREMOVEROW, new ActionListenerImpl(),
+ new String[]
+ {
+ "FontDescriptor", "Height", "HelpURL", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ oFontDescriptor, new Integer(14), HelpIds.getHelpIdString(lastHelpIndex + 2), "-", new Integer(_iPosX + iCompWidth - 16), new Integer(iButtonPosY), IStep, new Short(curtabindex++), new Integer(16)
+ });
+ CurDBMetaData.Type = getQueryType();
+ }
+ catch (com.sun.star.uno.Exception exception)
+ {
+ Resource.showCommonResourceError(CurDBMetaData.xMSF);
+ }
+ }
+
+ public int getQueryType()
+ {
+ if (((Short) CurUnoDialog.getControlProperty("optDetailQuery", "State")).intValue() == 1)
+ {
+ return QueryMetaData.QueryType.SODETAILQUERY;
+ }
+ else
+ {
+ return QueryMetaData.QueryType.SOSUMMARYQUERY;
+ }
+ }
+
+ class ActionListenerImpl implements com.sun.star.awt.XActionListener
+ {
+
+ public void disposing(EventObject eventObject)
+ {
+ }
+
+ public void actionPerformed(com.sun.star.awt.ActionEvent actionEvent)
+ {
+ try
+ {
+ int iKey = CurUnoDialog.getControlKey(actionEvent.Source, CurUnoDialog.ControlList);
+ switch (iKey)
+ {
+ case SOADDROW:
+ addRow();
+ break;
+
+ case SOREMOVEROW:
+ removeRow();
+ break;
+
+ default:
+ toggleComponent();
+ break;
+ }
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.out);
+ }
+ }
+ }
+
+ public int getCount()
+ {
+ return Count;
+ }
+
+ protected void insertControlGroup(int i, int ypos)
+ {
+ if (i == 0)
+ {
+ int BaseID = 2300;
+ soptDetailQuery = CurUnoDialog.m_oResource.getResText(BaseID + 11);
+ soptSummaryQuery = CurUnoDialog.m_oResource.getResText(BaseID + 12);
+ slblAggregate = CurUnoDialog.m_oResource.getResText(BaseID + 16);
+ slblFieldNames = CurUnoDialog.m_oResource.getResText(BaseID + 17);
+ sFunctions = CurUnoDialog.m_oResource.getResArray(BaseID + 40, 4);
+
+ sDuplicateAggregateFunction = CurUnoDialog.m_oResource.getResText(BaseID + 90);
+ }
+ if (ControlRowVector == null)
+ {
+ ControlRowVector = new Vector();
+ }
+ int locHelpID = curHelpIndex + (i * 2);
+ ControlRow oControlRow = new ControlRow(i, ypos, locHelpID);
+ ControlRowVector.add(oControlRow);
+ }
+
+ protected void setControlGroupVisible(int _index, boolean _bIsVisible)
+ {
+ ControlRow oControlRow = (ControlRow) ControlRowVector.elementAt(_index);
+ oControlRow.setVisible(_bIsVisible);
+ if (_index >= (this.CurDBMetaData.AggregateFieldNames.length))
+ {
+ oControlRow.settovoid();
+ }
+ }
+
+ protected void addRow()
+ {
+ int fieldcount = super.getTotalFieldCount();
+ registerControlGroupAtIndex(fieldcount);
+ if (fieldcount < super.getBlockIncrementation())
+ {
+ ControlRow oControlRow = (ControlRow) ControlRowVector.elementAt(fieldcount);
+ oControlRow.setVisible(true);
+ oControlRow.settovoid();
+ }
+ else
+ {
+ ControlRow oControlRow = (ControlRow) ControlRowVector.elementAt(super.getBlockIncrementation() - 1);
+ super.setScrollValue(getScrollValue() + 1, (fieldcount + 1));
+ oControlRow.settovoid();
+ }
+ fieldcount++;
+ super.setTotalFieldCount(fieldcount);
+ toggleButtons();
+ CurUnoDialog.repaintDialogStep();
+ }
+
+ protected void removeRow()
+ {
+ int fieldcount = super.getTotalFieldCount();
+ if (fieldcount > 0)
+ {
+ ControlRow oControlRow;
+ fieldcount--;
+ if ((fieldcount + 1) <= super.getBlockIncrementation())
+ {
+ oControlRow = (ControlRow) ControlRowVector.elementAt(fieldcount);
+ oControlRow.setVisible(false);
+ }
+ super.setScrollValue(getScrollValue() - 1, (fieldcount));
+ super.unregisterControlGroup(fieldcount);
+
+ }
+ toggleButtons();
+ CurUnoDialog.repaintDialogStep();
+ }
+
+ protected void toggleButtons()
+ {
+ ControlRow curcontrolrow = null;
+ boolean biscomplete = true;
+ CurDBMetaData.Type = getQueryType();
+ CurUnoDialog.setControlProperty("btnminus", "Enabled", new Boolean((super.getTotalFieldCount() > 0) && (CurDBMetaData.Type == QueryMetaData.QueryType.SOSUMMARYQUERY)));
+ int fieldcount = super.getCurFieldCount();
+ if (fieldcount > 0)
+ {
+ curcontrolrow = (ControlRow) ControlRowVector.elementAt(super.getCurFieldCount() - 1);
+ biscomplete = curcontrolrow.isComplete();
+ }
+ CurUnoDialog.setControlProperty("btnplus", "Enabled", new Boolean(biscomplete && (CurDBMetaData.Type == QueryMetaData.QueryType.SOSUMMARYQUERY)));
+ togglefollowingDialogSteps();
+ }
+
+ public void toggleComponent()
+ {
+ CurDBMetaData.Type = getQueryType();
+ boolean benableComponent = isAggregateComponentEnabled();
+ CurUnoDialog.setControlProperty("lblAggregate", "Enabled", new Boolean(benableComponent));
+ CurUnoDialog.setControlProperty("lblFieldnames", "Enabled", new Boolean(benableComponent));
+ toggleButtons();
+ super.toggleComponent(benableComponent);
+ super.toggleControls(benableComponent);
+ togglefollowingDialogSteps();
+ }
+
+ private boolean isAggregateComponentEnabled()
+ {
+ return (CurDBMetaData.Type == QueryMetaData.QueryType.SOSUMMARYQUERY);
+ }
+
+ public boolean isGroupingpossible()
+ {
+ try
+ {
+ boolean benableGroupPage = isAggregateComponentEnabled() && CurDBMetaData.xDBMetaData.supportsGroupBy() && hasonlycompletefunctions();
+ String[][] sAggregateFieldNames = this.getAggregateFieldNames();
+ if (benableGroupPage)
+ {
+ for (int i = 0; i < CurDBMetaData.NumericFieldNames.length; i++)
+ {
+ boolean bisthere = (JavaTools.FieldInTable(sAggregateFieldNames, CurDBMetaData.NumericFieldNames[i]) > -1);
+ if (!bisthere)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace(System.out);
+ }
+ return false;
+ }
+
+ private void togglefollowingDialogSteps()
+ {
+ boolean benabletherest = true;
+ boolean benableGroupPage = isGroupingpossible();
+ CurUnoDialog.setStepEnabled(UIConsts.SOGROUPSELECTIONPAGE, benableGroupPage);
+ CurUnoDialog.setStepEnabled(UIConsts.SOGROUPFILTERPAGE, benableGroupPage && CurDBMetaData.GroupFieldNames.length > 0);
+ if (isAggregateComponentEnabled())
+ {
+ benabletherest = hasonlycompletefunctions();
+ }
+ CurUnoDialog.enablefromStep(UIConsts.SOTITLESPAGE, benabletherest);
+ CurUnoDialog.enableNextButton(benabletherest);
+ }
+
+ private void hideControlRowsfromindex(int _index)
+ {
+ if (_index < this.ControlRowVector.size())
+ {
+ for (int i = _index; i < ControlRowVector.size(); i++)
+ {
+ ControlRow oControlRow = (ControlRow) ControlRowVector.elementAt(i);
+// if (i == _index)
+// oControlRow.settovoid();
+// else
+ oControlRow.setVisible(false);
+ }
+ }
+
+ }
+
+ public String[][] getAggregateFieldNames()
+ {
+ try
+ {
+ CurDBMetaData.Type = getQueryType();
+ if (CurDBMetaData.Type == QueryMetaData.QueryType.SOSUMMARYQUERY)
+ {
+ Vector aggregatevector = new Vector();
+ PropertyValue[][] aggregatelist = this.getScrollFieldValues();
+ PropertyValue[] currowproperties;
+ PropertyValue curaggregateproperty;
+ int a = 0;
+ if (CurDBMetaData.AggregateFieldNames != null)
+ {
+ for (int i = 0; i < aggregatelist.length; i++)
+ {
+ currowproperties = aggregatelist[i];
+ if ((currowproperties[0].Value != null) && (currowproperties[1].Value != null))
+ {
+ short[] iselfield = (short[]) AnyConverter.toArray(currowproperties[1].Value);
+ short[] iselfunction = (short[]) AnyConverter.toArray(currowproperties[0].Value);
+ if ((iselfield.length > 0) && (iselfunction.length > 0))
+ {
+ String[] curaggregatename = new String[2];
+ curaggregatename[0] = CurDBMetaData.NumericFieldNames[iselfield[0]];
+ curaggregatename[1] = this.sFunctionOperators[iselfunction[0]];
+ aggregatevector.add(curaggregatename);
+ a++;
+ }
+ }
+ }
+ }
+ CurDBMetaData.AggregateFieldNames = new String[a][2];
+ aggregatevector.toArray(CurDBMetaData.AggregateFieldNames);
+ }
+
+ int iduplicate = JavaTools.getDuplicateFieldIndex(CurDBMetaData.AggregateFieldNames);
+ if (iduplicate != -1)
+ {
+ sDuplicateAggregateFunction = JavaTools.replaceSubString(sDuplicateAggregateFunction, CurDBMetaData.AggregateFieldNames[iduplicate][0], "<NUMERICFIELD>");
+ int index = JavaTools.FieldInList(sFunctionOperators, CurDBMetaData.AggregateFieldNames[iduplicate][1]);
+ String sDisplayFunction = sFunctions[index];
+ sDuplicateAggregateFunction = JavaTools.replaceSubString(sDuplicateAggregateFunction, sDisplayFunction, "<FUNCTION>");
+ CurUnoDialog.showMessageBox("WarningBox", VclWindowPeerAttribute.OK, sDuplicateAggregateFunction);
+ CurUnoDialog.vetoableChange(new java.beans.PropertyChangeEvent(CurUnoDialog, "Steps", new Integer(1), new Integer(2)));
+ return new String[][]
+ {
+ };
+ }
+ else
+ {
+ return CurDBMetaData.AggregateFieldNames;
+ }
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.out);
+ return null;
+ }
+ }
+
+ public void initialize()
+ {
+ CurDBMetaData.setNumericFields();
+ initializeScrollFields();
+ int icount = CurDBMetaData.AggregateFieldNames.length;
+ if (icount == 0)
+ {
+ super.initialize(1);
+ hideControlRowsfromindex(1);
+ }
+ else
+ {
+ super.initialize(icount);
+ hideControlRowsfromindex(icount);
+ }
+ toggleComponent();
+ CurUnoDialog.repaintDialogStep();
+ }
+
+ protected void initializeScrollFields()
+ {
+ ControlRow curControlRow;
+ if (CurDBMetaData.AggregateFieldNames != null)
+ {
+ for (int i = 0; i < this.getBlockIncrementation(); i++)
+ {
+ curControlRow = (ControlRow) ControlRowVector.elementAt(i);
+ curControlRow.insertFieldNames();
+ }
+ for (int i = 0; i <= CurDBMetaData.AggregateFieldNames.length; i++)
+ {
+ registerControlGroupAtIndex(i);
+ }
+ }
+ }
+
+ private void registerControlGroupAtIndex(int _index)
+ {
+ short[] iselfunctionlist = new short[]
+ {
+ };
+ short[] iselfieldslist = new short[]
+ {
+ };
+ PropertyValue[] currowproperties = new PropertyValue[2];
+ if (_index < CurDBMetaData.AggregateFieldNames.length)
+ {
+ short iselfieldsindex = (short) JavaTools.FieldInList(CurDBMetaData.NumericFieldNames, CurDBMetaData.AggregateFieldNames[_index][0]);
+ iselfieldslist = new short[]
+ {
+ iselfieldsindex
+ };
+ short iselfunctionindex = (short) JavaTools.FieldInList(sFunctionOperators, CurDBMetaData.AggregateFieldNames[_index][1]);
+ iselfunctionlist = new short[]
+ {
+ iselfunctionindex
+ };
+ }
+ currowproperties[0] = Properties.createProperty(getFunctionControlName(_index), iselfunctionlist, _index);
+ currowproperties[1] = Properties.createProperty(getFieldsControlName(_index), iselfieldslist, _index); //getTitleName(i)
+ super.registerControlGroup(currowproperties, _index);
+ }
+
+ private String getFunctionControlName(int _index)
+ {
+ String namesuffix = "_" + String.valueOf(_index + 1);
+ return "lstfunctions" + namesuffix;
+ }
+
+ private String getFieldsControlName(int _index)
+ {
+ String namesuffix = "_" + String.valueOf(_index + 1);
+ return "lstFieldnames" + namesuffix;
+ }
+
+ private boolean hasonlycompletefunctions()
+ {
+ int maxfieldcount = super.getCurFieldCount();
+ if (maxfieldcount > 0)
+ {
+ ControlRow curcontrolrow = (ControlRow) this.ControlRowVector.elementAt(maxfieldcount - 1);
+ return curcontrolrow.isComplete();
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ protected class ControlRow
+ {
+
+ private XListBox xFieldListBox;
+ private XListBox xFunctionListBox;
+ private int index;
+
+ protected ControlRow(int _index, int ypos, int _curHelpID)
+ {
+ try
+ {
+ this.index = _index;
+ xFunctionListBox = CurUnoDialog.insertListBox(getFunctionControlName(index), 1, null, new ItemListenerImpl(),
+ new String[]
+ {
+ "Dropdown", "Height", "HelpURL", "PositionX", "PositionY", "Step", "StringItemList", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ Boolean.TRUE, new Integer(12), HelpIds.getHelpIdString(_curHelpID++), new Integer(iCompPosX + 4), new Integer(ypos), UIConsts.INVISIBLESTEP, sFunctions, new Short(curtabindex++), new Integer(88)
+ });
+
+ xFieldListBox = CurUnoDialog.insertListBox(getFieldsControlName(index), 1, null, new ItemListenerImpl(),
+ new String[]
+ {
+ "Dropdown", "Height", "HelpURL", "PositionX", "PositionY", "Step", "TabIndex", "Width"
+ },
+ new Object[]
+ {
+ Boolean.TRUE, new Integer(12), HelpIds.getHelpIdString(_curHelpID++), new Integer(iCompPosX + 98), new Integer(ypos), UIConsts.INVISIBLESTEP, new Short(curtabindex++), new Integer(86)
+ });
+ lastHelpIndex = _curHelpID - 1;
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.out);
+ }
+ }
+
+ private String getSelectedFieldName()
+ {
+ return xFieldListBox.getSelectedItem();
+ }
+
+ private String getSelectedFunction()
+ {
+ return xFunctionListBox.getSelectedItem();
+ }
+
+ private void setVisible(boolean _bvisible)
+ {
+ CurUnoDialog.setControlVisible(getFunctionControlName(index), _bvisible);
+ CurUnoDialog.setControlVisible(getFieldsControlName(index), _bvisible);
+ }
+
+ private void insertFieldNames()
+ {
+ Helper.setUnoPropertyValue(UnoDialog.getModel(xFieldListBox), "StringItemList", CurDBMetaData.NumericFieldNames);
+ }
+
+ private boolean isComplete()
+ {
+ boolean bfieldnameisselected = (Helper.getUnoArrayPropertyValue(UnoDialog.getModel(xFieldListBox), "SelectedItems") != null);
+ boolean bfunctionisselected = (Helper.getUnoArrayPropertyValue(UnoDialog.getModel(xFunctionListBox), "SelectedItems") != null);
+ return (bfieldnameisselected && bfunctionisselected);
+ }
+
+ private void settovoid()
+ {
+ CurUnoDialog.deselectListBox(xFieldListBox);
+ CurUnoDialog.deselectListBox(xFunctionListBox);
+ }
+
+ protected class ItemListenerImpl implements com.sun.star.awt.XItemListener
+ {
+
+ public void itemStateChanged(com.sun.star.awt.ItemEvent EventObject)
+ {
+ try
+ {
+ toggleButtons();
+ togglefollowingDialogSteps();
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.out);
+ }
+ }
+
+ public void disposing(com.sun.star.lang.EventObject eventObject)
+ {
+ }
+ }
+ }
+}