1*a1b4a26bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*a1b4a26bSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*a1b4a26bSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*a1b4a26bSAndrew Rist  * distributed with this work for additional information
6*a1b4a26bSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*a1b4a26bSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*a1b4a26bSAndrew Rist  * "License"); you may not use this file except in compliance
9*a1b4a26bSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*a1b4a26bSAndrew Rist  *
11*a1b4a26bSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*a1b4a26bSAndrew Rist  *
13*a1b4a26bSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*a1b4a26bSAndrew Rist  * software distributed under the License is distributed on an
15*a1b4a26bSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a1b4a26bSAndrew Rist  * KIND, either express or implied.  See the License for the
17*a1b4a26bSAndrew Rist  * specific language governing permissions and limitations
18*a1b4a26bSAndrew Rist  * under the License.
19*a1b4a26bSAndrew Rist  *
20*a1b4a26bSAndrew Rist  *************************************************************/
21*a1b4a26bSAndrew Rist 
22*a1b4a26bSAndrew Rist 
23cdf0e10cSrcweir package com.sun.star.wizards.db;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
26cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
27cdf0e10cSrcweir 
28cdf0e10cSrcweir import java.util.*;
29cdf0e10cSrcweir import com.sun.star.lang.Locale;
30cdf0e10cSrcweir import com.sun.star.wizards.common.*;
31cdf0e10cSrcweir 
32cdf0e10cSrcweir public class QueryMetaData extends CommandMetaData
33cdf0e10cSrcweir {
34cdf0e10cSrcweir 
35cdf0e10cSrcweir     private SQLQueryComposer oSQLQueryComposer = null;
36cdf0e10cSrcweir     FieldColumn CurFieldColumn;
37cdf0e10cSrcweir     public String Command;
38cdf0e10cSrcweir     // Vector CommandNamesV;
39cdf0e10cSrcweir     private PropertyValue[][] m_aFilterConditions; /* = new PropertyValue[][] {}; */
40cdf0e10cSrcweir 
41cdf0e10cSrcweir     public PropertyValue[][] GroupByFilterConditions = new PropertyValue[][]
42cdf0e10cSrcweir     {
43cdf0e10cSrcweir     };
44cdf0e10cSrcweir     public String[] UniqueAggregateFieldNames = new String[]
45cdf0e10cSrcweir     {
46cdf0e10cSrcweir     };
47cdf0e10cSrcweir     public int Type = QueryType.SODETAILQUERY;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir     public static interface QueryType
50cdf0e10cSrcweir     {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir         final static int SOSUMMARYQUERY = 0;
53cdf0e10cSrcweir         final static int SODETAILQUERY = 1;
54cdf0e10cSrcweir     }
55cdf0e10cSrcweir 
QueryMetaData(XMultiServiceFactory xMSF, Locale CharLocale, NumberFormatter oNumberFormatter)56cdf0e10cSrcweir     public QueryMetaData(XMultiServiceFactory xMSF, Locale CharLocale, NumberFormatter oNumberFormatter)
57cdf0e10cSrcweir     {
58cdf0e10cSrcweir         super(xMSF, CharLocale, oNumberFormatter);
59cdf0e10cSrcweir     }
60cdf0e10cSrcweir 
QueryMetaData(XMultiServiceFactory _xMSF)61cdf0e10cSrcweir     public QueryMetaData(XMultiServiceFactory _xMSF)
62cdf0e10cSrcweir     {
63cdf0e10cSrcweir         super(_xMSF);
64cdf0e10cSrcweir     }
65cdf0e10cSrcweir 
setFilterConditions(PropertyValue[][] _FilterConditions)66cdf0e10cSrcweir     public void setFilterConditions(PropertyValue[][] _FilterConditions)
67cdf0e10cSrcweir     {
68cdf0e10cSrcweir         this.m_aFilterConditions = _FilterConditions;
69cdf0e10cSrcweir     }
70cdf0e10cSrcweir 
getFilterConditions()71cdf0e10cSrcweir     public PropertyValue[][] getFilterConditions()
72cdf0e10cSrcweir     {
73cdf0e10cSrcweir         if (m_aFilterConditions == null)
74cdf0e10cSrcweir         {
75cdf0e10cSrcweir             m_aFilterConditions = new PropertyValue[][]
76cdf0e10cSrcweir                     {
77cdf0e10cSrcweir                     };
78cdf0e10cSrcweir         }
79cdf0e10cSrcweir         return m_aFilterConditions;
80cdf0e10cSrcweir     }
81cdf0e10cSrcweir 
setGroupByFilterConditions(PropertyValue[][] _GroupByFilterConditions)82cdf0e10cSrcweir     public void setGroupByFilterConditions(PropertyValue[][] _GroupByFilterConditions)
83cdf0e10cSrcweir     {
84cdf0e10cSrcweir         this.GroupByFilterConditions = _GroupByFilterConditions;
85cdf0e10cSrcweir     }
86cdf0e10cSrcweir 
getGroupByFilterConditions()87cdf0e10cSrcweir     public PropertyValue[][] getGroupByFilterConditions()
88cdf0e10cSrcweir     {
89cdf0e10cSrcweir         return this.GroupByFilterConditions;
90cdf0e10cSrcweir     }
91cdf0e10cSrcweir //	public void addFieldColumn(String _FieldName, String _sCommandName){
92cdf0e10cSrcweir //		FieldColumn oFieldColumn = getFieldColumn(_FieldName, _sCommandName);
93cdf0e10cSrcweir //		if (oFieldColumn == null){
94cdf0e10cSrcweir //			FieldColumn[] LocFieldColumns = new FieldColumn[FieldColumns.length + 1];
95cdf0e10cSrcweir //			System.arraycopy(FieldColumns, 0, LocFieldColumns, 0, FieldColumns.length);
96cdf0e10cSrcweir //			LocFieldColumns[FieldColumns.length] = new FieldColumn(this, _FieldName, _sCommandName);
97cdf0e10cSrcweir //			FieldColumns = LocFieldColumns;
98cdf0e10cSrcweir //		}
99cdf0e10cSrcweir //    }
100cdf0e10cSrcweir 
addSeveralFieldColumns(String[] _FieldNames, String _sCommandName)101cdf0e10cSrcweir     public void addSeveralFieldColumns(String[] _FieldNames, String _sCommandName)
102cdf0e10cSrcweir     {
103cdf0e10cSrcweir         ArrayList<FieldColumn> oToBeAddedFieldColumns = new ArrayList<FieldColumn>();
104cdf0e10cSrcweir         for (int i = 0; i < _FieldNames.length; i++)
105cdf0e10cSrcweir         {
106cdf0e10cSrcweir             FieldColumn oFieldColumn = getFieldColumn(_FieldNames[i], _sCommandName);
107cdf0e10cSrcweir             if (oFieldColumn == null)
108cdf0e10cSrcweir             {
109cdf0e10cSrcweir                 oToBeAddedFieldColumns.add(new FieldColumn(this, _FieldNames[i], _sCommandName, false));
110cdf0e10cSrcweir             }
111cdf0e10cSrcweir         }
112cdf0e10cSrcweir         if (oToBeAddedFieldColumns.size() > 0)
113cdf0e10cSrcweir         {
114cdf0e10cSrcweir             int nOldFieldCount = FieldColumns.length;
115cdf0e10cSrcweir             FieldColumn[] LocFieldColumns = new FieldColumn[nOldFieldCount + oToBeAddedFieldColumns.size()];
116cdf0e10cSrcweir             System.arraycopy(FieldColumns, 0, LocFieldColumns, 0, nOldFieldCount);
117cdf0e10cSrcweir             for (int i = 0; i < oToBeAddedFieldColumns.size(); i++)
118cdf0e10cSrcweir             {
119cdf0e10cSrcweir                 LocFieldColumns[nOldFieldCount + i] = oToBeAddedFieldColumns.get(i);
120cdf0e10cSrcweir             }
121cdf0e10cSrcweir             FieldColumns = LocFieldColumns;
122cdf0e10cSrcweir         }
123cdf0e10cSrcweir     }
124cdf0e10cSrcweir 
reorderFieldColumns(String[] _sDisplayFieldNames)125cdf0e10cSrcweir     public void reorderFieldColumns(String[] _sDisplayFieldNames)
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         FieldColumn[] LocFieldColumns = new FieldColumn[FieldColumns.length];
128cdf0e10cSrcweir         for (int i = 0; i < _sDisplayFieldNames.length; i++)
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             FieldColumn LocFieldColumn = this.getFieldColumnByDisplayName(_sDisplayFieldNames[i]);
131cdf0e10cSrcweir             LocFieldColumns[i] = LocFieldColumn;
132cdf0e10cSrcweir         }
133cdf0e10cSrcweir         System.arraycopy(LocFieldColumns, 0, FieldColumns, 0, LocFieldColumns.length);
134cdf0e10cSrcweir     }
135cdf0e10cSrcweir 
removeSeveralFieldColumnsByDisplayFieldName(String[] _DisplayFieldNames)136cdf0e10cSrcweir     public void removeSeveralFieldColumnsByDisplayFieldName(String[] _DisplayFieldNames)
137cdf0e10cSrcweir     {
138cdf0e10cSrcweir         ArrayList<FieldColumn> oRemainingFieldColumns = new ArrayList<FieldColumn>();
139cdf0e10cSrcweir         int a = 0;
140cdf0e10cSrcweir         for (int n = 0; n < FieldColumns.length; n++)
141cdf0e10cSrcweir         {
142cdf0e10cSrcweir             String sDisplayFieldName = FieldColumns[n].getDisplayFieldName();
143cdf0e10cSrcweir             if (!(JavaTools.FieldInList(_DisplayFieldNames, sDisplayFieldName) > -1))
144cdf0e10cSrcweir             {
145cdf0e10cSrcweir                 oRemainingFieldColumns.add(FieldColumns[n]);
146cdf0e10cSrcweir             }
147cdf0e10cSrcweir         }
148cdf0e10cSrcweir         FieldColumns = new FieldColumn[oRemainingFieldColumns.size()];
149cdf0e10cSrcweir         oRemainingFieldColumns.toArray(FieldColumns);
150cdf0e10cSrcweir     }
151cdf0e10cSrcweir 
removeFieldColumn(String _sFieldName, String _sCommandName)152cdf0e10cSrcweir     public void removeFieldColumn(String _sFieldName, String _sCommandName)
153cdf0e10cSrcweir     {
154cdf0e10cSrcweir         FieldColumn oFieldColumn = getFieldColumn(_sFieldName, _sCommandName);
155cdf0e10cSrcweir         int a = 0;
156cdf0e10cSrcweir         if (oFieldColumn != null)
157cdf0e10cSrcweir         {
158cdf0e10cSrcweir             FieldColumn[] LocFieldColumns = new FieldColumn[FieldColumns.length - 1];
159cdf0e10cSrcweir             for (int i = 0; i < FieldColumns.length; i++)
160cdf0e10cSrcweir             {
161cdf0e10cSrcweir                 if (!FieldColumns[i].getFieldName().equals(_sFieldName) && !FieldColumns[i].getCommandName().equals(_sCommandName))
162cdf0e10cSrcweir                 {
163cdf0e10cSrcweir                     LocFieldColumns[a] = FieldColumns[i];
164cdf0e10cSrcweir                     a++;
165cdf0e10cSrcweir                 }
166cdf0e10cSrcweir             }
167cdf0e10cSrcweir             FieldColumns = LocFieldColumns;
168cdf0e10cSrcweir         }
169cdf0e10cSrcweir     }
170cdf0e10cSrcweir 
getIncludedCommandNames()171cdf0e10cSrcweir     public String[] getIncludedCommandNames()
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         // FieldColumn CurQueryField;
174cdf0e10cSrcweir         ArrayList<String> CommandNamesV = new ArrayList<String>(1);
175cdf0e10cSrcweir         // String CurCommandName;
176cdf0e10cSrcweir         for (int i = 0; i < FieldColumns.length; i++)
177cdf0e10cSrcweir         {
178cdf0e10cSrcweir             final FieldColumn CurQueryField = FieldColumns[i];
179cdf0e10cSrcweir             final String CurCommandName = CurQueryField.getCommandName();
180cdf0e10cSrcweir             if (!CommandNamesV.contains(CurCommandName))
181cdf0e10cSrcweir             {
182cdf0e10cSrcweir                 CommandNamesV.add(CurCommandName);
183cdf0e10cSrcweir             }
184cdf0e10cSrcweir         }
185cdf0e10cSrcweir         String[] sIncludedCommandNames = new String[CommandNamesV.size()];
186cdf0e10cSrcweir         CommandNamesV.toArray(sIncludedCommandNames);
187cdf0e10cSrcweir         return sIncludedCommandNames;
188cdf0e10cSrcweir     }
189cdf0e10cSrcweir 
getIncludedCommandNames(String[] _FieldNames)190cdf0e10cSrcweir     public static String[] getIncludedCommandNames(String[] _FieldNames)
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         ArrayList<String> CommandNames = new ArrayList<String>(1);
193cdf0e10cSrcweir         for (int i = 0; i < _FieldNames.length; i++)
194cdf0e10cSrcweir         {
195cdf0e10cSrcweir             String CurCommandName = PropertyNames.EMPTY_STRING;
196cdf0e10cSrcweir             String[] MetaList = JavaTools.ArrayoutofString(_FieldNames[i], ".");
197cdf0e10cSrcweir             if (MetaList.length > 1)
198cdf0e10cSrcweir             {
199cdf0e10cSrcweir                 for (int a = 0; a < MetaList.length - 1; a++)
200cdf0e10cSrcweir                 {
201cdf0e10cSrcweir                     CurCommandName += MetaList[a];
202cdf0e10cSrcweir                 }
203cdf0e10cSrcweir                 if (!CommandNames.contains(CurCommandName))
204cdf0e10cSrcweir                 {
205cdf0e10cSrcweir                     CommandNames.add(CurCommandName);
206cdf0e10cSrcweir                 }
207cdf0e10cSrcweir             }
208cdf0e10cSrcweir         }
209cdf0e10cSrcweir         String[] sIncludedCommandNames = new String[CommandNames.size()];
210cdf0e10cSrcweir         CommandNames.toArray(sIncludedCommandNames);
211cdf0e10cSrcweir         return sIncludedCommandNames;
212cdf0e10cSrcweir     }
213cdf0e10cSrcweir 
getFieldNamesOfCommand(String _sCommandName)214cdf0e10cSrcweir     public String[] getFieldNamesOfCommand(String _sCommandName)
215cdf0e10cSrcweir     {
216cdf0e10cSrcweir         CommandObject oTable = getTableByName(_sCommandName);
217cdf0e10cSrcweir         return oTable.getColumns().getElementNames();
218cdf0e10cSrcweir     }
219cdf0e10cSrcweir 
initializeFieldTitleSet(boolean _bAppendMode)220cdf0e10cSrcweir     public void initializeFieldTitleSet(boolean _bAppendMode)
221cdf0e10cSrcweir     {
222cdf0e10cSrcweir         try
223cdf0e10cSrcweir         {
224cdf0e10cSrcweir             // this.getIncludedCommandNames(); // fills the var CommandNamesV indirectly :-(
225cdf0e10cSrcweir             if (FieldTitleSet == null)
226cdf0e10cSrcweir             {
227cdf0e10cSrcweir                 FieldTitleSet = new HashMap();
228cdf0e10cSrcweir             }
229cdf0e10cSrcweir             String[] aCommandNames = getIncludedCommandNames();
230cdf0e10cSrcweir             for (int i = 0; i < aCommandNames.length; i++)
231cdf0e10cSrcweir             {
232cdf0e10cSrcweir                 String sCommandName = aCommandNames[i];
233cdf0e10cSrcweir                 CommandObject oTable = getTableByName(sCommandName);
234cdf0e10cSrcweir                 String sTableName = oTable.getName();
235cdf0e10cSrcweir                 String[] LocFieldNames = oTable.getColumns().getElementNames();
236cdf0e10cSrcweir                 for (int a = 0; a < LocFieldNames.length; a++)
237cdf0e10cSrcweir                 {
238cdf0e10cSrcweir                     String sDisplayFieldName = FieldColumn.composeDisplayFieldName(sTableName, LocFieldNames[a]);
239cdf0e10cSrcweir                     if (!FieldTitleSet.containsKey(sDisplayFieldName))
240cdf0e10cSrcweir                     {
241cdf0e10cSrcweir                         FieldTitleSet.put(sDisplayFieldName, LocFieldNames[a]);
242cdf0e10cSrcweir                     }
243cdf0e10cSrcweir                 }
244cdf0e10cSrcweir             }
245cdf0e10cSrcweir         }
246cdf0e10cSrcweir         catch (Exception exception)
247cdf0e10cSrcweir         {
248cdf0e10cSrcweir             exception.printStackTrace(System.out);
249cdf0e10cSrcweir         }
250cdf0e10cSrcweir     }
251cdf0e10cSrcweir 
getUniqueAggregateFieldNames()252cdf0e10cSrcweir     public String[] getUniqueAggregateFieldNames()
253cdf0e10cSrcweir     {
254cdf0e10cSrcweir         ArrayList<String> UniqueAggregateFieldVector = new ArrayList<String>();
255cdf0e10cSrcweir         for (int i = 0; i < AggregateFieldNames.length; i++)
256cdf0e10cSrcweir         {
257cdf0e10cSrcweir             if (!UniqueAggregateFieldVector.contains(AggregateFieldNames[i][0]))
258cdf0e10cSrcweir             {
259cdf0e10cSrcweir                 UniqueAggregateFieldVector.add(AggregateFieldNames[i][0]);
260cdf0e10cSrcweir             }
261cdf0e10cSrcweir         }
262cdf0e10cSrcweir         UniqueAggregateFieldNames = new String[UniqueAggregateFieldVector.size()];
263cdf0e10cSrcweir         UniqueAggregateFieldVector.toArray(UniqueAggregateFieldNames);
264cdf0e10cSrcweir         return UniqueAggregateFieldNames;
265cdf0e10cSrcweir     }
266cdf0e10cSrcweir 
hasNumericalFields()267cdf0e10cSrcweir     public boolean hasNumericalFields()
268cdf0e10cSrcweir     {
269cdf0e10cSrcweir         for (int i = 0; i < FieldColumns.length; i++)
270cdf0e10cSrcweir         {
271cdf0e10cSrcweir             if (FieldColumns[i].isNumberFormat())
272cdf0e10cSrcweir             {
273cdf0e10cSrcweir                 return true;
274cdf0e10cSrcweir             }
275cdf0e10cSrcweir         }
276cdf0e10cSrcweir         return false;
277cdf0e10cSrcweir     }
278cdf0e10cSrcweir 
getAggregateIndex(String _DisplayFieldName)279cdf0e10cSrcweir     public int getAggregateIndex(String _DisplayFieldName)
280cdf0e10cSrcweir     {
281cdf0e10cSrcweir         int iAggregate = -1;
282cdf0e10cSrcweir         if (Type == QueryType.SOSUMMARYQUERY)
283cdf0e10cSrcweir         {
284cdf0e10cSrcweir             iAggregate = JavaTools.FieldInTable(AggregateFieldNames, _DisplayFieldName);
285cdf0e10cSrcweir         }
286cdf0e10cSrcweir         return iAggregate;
287cdf0e10cSrcweir     }
288cdf0e10cSrcweir 
getSQLQueryComposer()289cdf0e10cSrcweir     public SQLQueryComposer getSQLQueryComposer()
290cdf0e10cSrcweir     {
291cdf0e10cSrcweir         if (oSQLQueryComposer == null)
292cdf0e10cSrcweir         {
293cdf0e10cSrcweir             oSQLQueryComposer = new SQLQueryComposer(this);
294cdf0e10cSrcweir         }
295cdf0e10cSrcweir         return oSQLQueryComposer;
296cdf0e10cSrcweir     }
297cdf0e10cSrcweir }
298