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