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