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