1a1b4a26bSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3a1b4a26bSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4a1b4a26bSAndrew Rist * or more contributor license agreements. See the NOTICE file 5a1b4a26bSAndrew Rist * distributed with this work for additional information 6a1b4a26bSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7a1b4a26bSAndrew Rist * to you under the Apache License, Version 2.0 (the 8a1b4a26bSAndrew Rist * "License"); you may not use this file except in compliance 9a1b4a26bSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11a1b4a26bSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13a1b4a26bSAndrew Rist * Unless required by applicable law or agreed to in writing, 14a1b4a26bSAndrew Rist * software distributed under the License is distributed on an 15a1b4a26bSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16a1b4a26bSAndrew Rist * KIND, either express or implied. See the License for the 17a1b4a26bSAndrew Rist * specific language governing permissions and limitations 18a1b4a26bSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20a1b4a26bSAndrew Rist *************************************************************/ 21a1b4a26bSAndrew Rist 22a1b4a26bSAndrew Rist 23cdf0e10cSrcweir package com.sun.star.wizards.db; 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // import com.sun.star.lang.IllegalArgumentException; 27cdf0e10cSrcweir // import com.sun.star.lang.WrappedTargetException; 28cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 29cdf0e10cSrcweir import com.sun.star.beans.*; 30cdf0e10cSrcweir // import com.sun.star.container.NoSuchElementException; 31cdf0e10cSrcweir import com.sun.star.container.XIndexAccess; 32cdf0e10cSrcweir import com.sun.star.container.XNameAccess; 33cdf0e10cSrcweir import com.sun.star.sdbcx.XColumnsSupplier; 34cdf0e10cSrcweir // import com.sun.star.sdb.XColumn; 35cdf0e10cSrcweir import com.sun.star.sdb.XSingleSelectQueryComposer; 36cdf0e10cSrcweir import com.sun.star.sdb.XSingleSelectQueryAnalyzer; 37cdf0e10cSrcweir import com.sun.star.ui.dialogs.XExecutableDialog; 38cdf0e10cSrcweir import com.sun.star.uno.AnyConverter; 39cdf0e10cSrcweir import com.sun.star.uno.Exception; 40cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 41cdf0e10cSrcweir import com.sun.star.sdbc.SQLException; 42cdf0e10cSrcweir import com.sun.star.lang.XInitialization; 43cdf0e10cSrcweir import com.sun.star.awt.XWindow; 44cdf0e10cSrcweir import com.sun.star.sdb.SQLFilterOperator; 45cdf0e10cSrcweir 46cdf0e10cSrcweir import com.sun.star.wizards.common.*; 47cdf0e10cSrcweir import java.util.ArrayList; 48cdf0e10cSrcweir 49cdf0e10cSrcweir public class SQLQueryComposer 50cdf0e10cSrcweir { 51cdf0e10cSrcweir 52cdf0e10cSrcweir public XColumnsSupplier xColSuppl; 53cdf0e10cSrcweir // XSQLQueryComposer xSQLQueryComposer; 54cdf0e10cSrcweir QueryMetaData CurDBMetaData; 55cdf0e10cSrcweir // String m_sSelectClause; 56cdf0e10cSrcweir // String m_sFromClause; 57cdf0e10cSrcweir public XSingleSelectQueryAnalyzer m_xQueryAnalyzer; 58cdf0e10cSrcweir ArrayList<CommandName> composedCommandNames = new ArrayList<CommandName>(1); 59cdf0e10cSrcweir private XSingleSelectQueryComposer m_queryComposer; 60cdf0e10cSrcweir XMultiServiceFactory xMSF; 61cdf0e10cSrcweir boolean bincludeGrouping = true; 62cdf0e10cSrcweir SQLQueryComposer(QueryMetaData _CurDBMetaData)63cdf0e10cSrcweir public SQLQueryComposer(QueryMetaData _CurDBMetaData) 64cdf0e10cSrcweir { 65cdf0e10cSrcweir try 66cdf0e10cSrcweir { 67cdf0e10cSrcweir this.CurDBMetaData = _CurDBMetaData; 68cdf0e10cSrcweir xMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, CurDBMetaData.DBConnection); 69cdf0e10cSrcweir final Object oQueryComposer = xMSF.createInstance("com.sun.star.sdb.SingleSelectQueryComposer"); 70cdf0e10cSrcweir m_xQueryAnalyzer = UnoRuntime.queryInterface(XSingleSelectQueryAnalyzer.class, oQueryComposer); 71cdf0e10cSrcweir m_queryComposer = UnoRuntime.queryInterface(XSingleSelectQueryComposer.class, m_xQueryAnalyzer); 72cdf0e10cSrcweir } 73cdf0e10cSrcweir catch (Exception exception) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir exception.printStackTrace(System.out); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir } 78cdf0e10cSrcweir addtoSelectClause(String DisplayFieldName)79cdf0e10cSrcweir private boolean addtoSelectClause(String DisplayFieldName) throws SQLException 80cdf0e10cSrcweir { 81cdf0e10cSrcweir return !(bincludeGrouping && CurDBMetaData.xDBMetaData.supportsGroupByUnrelated() && CurDBMetaData.GroupFieldNames != null && JavaTools.FieldInList(CurDBMetaData.GroupFieldNames, DisplayFieldName) > -1); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir getSelectClause(boolean _baddAliasFieldNames)84cdf0e10cSrcweir public String getSelectClause(boolean _baddAliasFieldNames) throws SQLException 85cdf0e10cSrcweir { 86*f861971cSDamjan Jovanovic // getFromClause() must be called first to populate composedCommandNames, 87*f861971cSDamjan Jovanovic // but it's idempotent, so let's call it now in case the caller didn't already: 88*f861971cSDamjan Jovanovic getFromClause(); 89*f861971cSDamjan Jovanovic 90cdf0e10cSrcweir String sSelectBaseClause = "SELECT "; 91cdf0e10cSrcweir String sSelectClause = sSelectBaseClause; 92cdf0e10cSrcweir for (int i = 0; i < CurDBMetaData.FieldColumns.length; i++) 93cdf0e10cSrcweir { 94cdf0e10cSrcweir if (addtoSelectClause(CurDBMetaData.FieldColumns[i].getDisplayFieldName())) 95cdf0e10cSrcweir { 96cdf0e10cSrcweir int iAggregate = CurDBMetaData.getAggregateIndex(CurDBMetaData.FieldColumns[i].getDisplayFieldName()); 97cdf0e10cSrcweir if (iAggregate > -1) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir sSelectClause += CurDBMetaData.AggregateFieldNames[iAggregate][1] + "(" + getComposedAliasFieldName(CurDBMetaData.AggregateFieldNames[iAggregate][0]) + ")"; 100cdf0e10cSrcweir if (_baddAliasFieldNames) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir sSelectClause += getAliasFieldNameClause(CurDBMetaData.AggregateFieldNames[iAggregate][0]); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir } 105cdf0e10cSrcweir else 106cdf0e10cSrcweir { 107cdf0e10cSrcweir sSelectClause += getComposedAliasFieldName(CurDBMetaData.FieldColumns[i].getDisplayFieldName()); 108cdf0e10cSrcweir if (_baddAliasFieldNames) 109cdf0e10cSrcweir { 110cdf0e10cSrcweir sSelectClause += getAliasFieldNameClause(CurDBMetaData.FieldColumns[i].getDisplayFieldName()); 111cdf0e10cSrcweir } 112cdf0e10cSrcweir } 113cdf0e10cSrcweir sSelectClause += ", "; 114cdf0e10cSrcweir } 115cdf0e10cSrcweir } 116cdf0e10cSrcweir // TODO: little bit unhandy version of remove the append 'comma' at the end 117cdf0e10cSrcweir if (sSelectClause.equals(sSelectBaseClause)) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir sSelectClause = sSelectClause.substring(0, sSelectClause.length() - 1); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir else 122cdf0e10cSrcweir { 123cdf0e10cSrcweir sSelectClause = sSelectClause.substring(0, sSelectClause.length() - 2); 124cdf0e10cSrcweir } 125cdf0e10cSrcweir return sSelectClause; 126cdf0e10cSrcweir } 127cdf0e10cSrcweir getAliasFieldNameClause(String _FieldName)128cdf0e10cSrcweir public String getAliasFieldNameClause(String _FieldName) 129cdf0e10cSrcweir { 130cdf0e10cSrcweir String FieldTitle = CurDBMetaData.getFieldTitle(_FieldName); 131cdf0e10cSrcweir if (!FieldTitle.equals(_FieldName)) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir return " AS " + CommandName.quoteName(FieldTitle, CurDBMetaData.getIdentifierQuote()); 134cdf0e10cSrcweir } 135cdf0e10cSrcweir else 136cdf0e10cSrcweir { 137cdf0e10cSrcweir return ""; 138cdf0e10cSrcweir } 139cdf0e10cSrcweir } 140cdf0e10cSrcweir appendFilterConditions()141cdf0e10cSrcweir public void appendFilterConditions() throws SQLException 142cdf0e10cSrcweir { 143cdf0e10cSrcweir try 144cdf0e10cSrcweir { 145cdf0e10cSrcweir for (int i = 0; i < CurDBMetaData.getFilterConditions().length; i++) 146cdf0e10cSrcweir { 147cdf0e10cSrcweir m_queryComposer.setStructuredFilter(CurDBMetaData.getFilterConditions()); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir } 150cdf0e10cSrcweir catch (Exception exception) 151cdf0e10cSrcweir { 152cdf0e10cSrcweir exception.printStackTrace(System.out); 153cdf0e10cSrcweir } 154cdf0e10cSrcweir } 155cdf0e10cSrcweir prependSortingCriteria()156cdf0e10cSrcweir public void prependSortingCriteria() throws SQLException 157cdf0e10cSrcweir { 158cdf0e10cSrcweir XIndexAccess xColumnIndexAccess = m_xQueryAnalyzer.getOrderColumns(); 159cdf0e10cSrcweir m_queryComposer.setOrder(""); 160cdf0e10cSrcweir for (int i = 0; i < CurDBMetaData.getSortFieldNames().length; i++) 161cdf0e10cSrcweir { 162cdf0e10cSrcweir appendSortingCriterion(i, false); 163cdf0e10cSrcweir } 164cdf0e10cSrcweir for (int i = 0; i < xColumnIndexAccess.getCount(); i++) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir try 167cdf0e10cSrcweir { 168cdf0e10cSrcweir XPropertySet xColumnPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xColumnIndexAccess.getByIndex(i)); 169cdf0e10cSrcweir String sName = (String) xColumnPropertySet.getPropertyValue(PropertyNames.PROPERTY_NAME); 170cdf0e10cSrcweir if (JavaTools.FieldInTable(CurDBMetaData.getSortFieldNames(), sName) == -1) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir boolean bascend = AnyConverter.toBoolean(xColumnPropertySet.getPropertyValue("IsAscending")); 173cdf0e10cSrcweir m_queryComposer.appendOrderByColumn(xColumnPropertySet, bascend); 174cdf0e10cSrcweir } 175cdf0e10cSrcweir } 176cdf0e10cSrcweir catch (Exception e) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir e.printStackTrace(System.out); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir } 181cdf0e10cSrcweir } 182cdf0e10cSrcweir appendSortingCriterion(int _SortIndex, boolean _baddAliasFieldNames)183cdf0e10cSrcweir private void appendSortingCriterion(int _SortIndex, boolean _baddAliasFieldNames) throws SQLException 184cdf0e10cSrcweir { 185cdf0e10cSrcweir String sSortValue = CurDBMetaData.getSortFieldNames()[_SortIndex][0]; 186cdf0e10cSrcweir XPropertySet xColumn = CurDBMetaData.getColumnObjectByFieldName(sSortValue, _baddAliasFieldNames); 187cdf0e10cSrcweir 188cdf0e10cSrcweir String sSort = CurDBMetaData.getSortFieldNames()[_SortIndex][1]; 189cdf0e10cSrcweir boolean bascend = (sSort.equals("ASC")); 190cdf0e10cSrcweir m_queryComposer.appendOrderByColumn(xColumn, bascend); 191cdf0e10cSrcweir } 192cdf0e10cSrcweir appendSortingcriteria(boolean _baddAliasFieldNames)193cdf0e10cSrcweir public void appendSortingcriteria(boolean _baddAliasFieldNames) throws SQLException 194cdf0e10cSrcweir { 195cdf0e10cSrcweir String sOrder = ""; 196cdf0e10cSrcweir m_queryComposer.setOrder(""); 197cdf0e10cSrcweir for (int i = 0; i < CurDBMetaData.getSortFieldNames().length; i++) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir String sSortValue = CurDBMetaData.getSortFieldNames()[i][0]; 200cdf0e10cSrcweir int iAggregate = CurDBMetaData.getAggregateIndex(sSortValue); 201cdf0e10cSrcweir if (iAggregate > -1) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir sOrder = m_xQueryAnalyzer.getOrder(); 204cdf0e10cSrcweir if (sOrder.length() > 0) 205cdf0e10cSrcweir { 206cdf0e10cSrcweir sOrder += ", "; 207cdf0e10cSrcweir } 208cdf0e10cSrcweir sOrder += CurDBMetaData.AggregateFieldNames[iAggregate][1] + "(" + CurDBMetaData.AggregateFieldNames[iAggregate][0] + ")"; 209cdf0e10cSrcweir sOrder += " " + CurDBMetaData.getSortFieldNames()[i][1]; 210cdf0e10cSrcweir m_queryComposer.setOrder(sOrder); 211cdf0e10cSrcweir } 212cdf0e10cSrcweir else 213cdf0e10cSrcweir { 214cdf0e10cSrcweir appendSortingCriterion(i, _baddAliasFieldNames); 215cdf0e10cSrcweir } 216cdf0e10cSrcweir sOrder = m_xQueryAnalyzer.getOrder(); 217cdf0e10cSrcweir } 218cdf0e10cSrcweir // just for debug! 219cdf0e10cSrcweir sOrder = m_queryComposer.getOrder(); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir appendGroupByColumns(boolean _baddAliasFieldNames)222cdf0e10cSrcweir public void appendGroupByColumns(boolean _baddAliasFieldNames) throws SQLException 223cdf0e10cSrcweir { 224cdf0e10cSrcweir for (int i = 0; i < CurDBMetaData.GroupFieldNames.length; i++) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir XPropertySet xColumn = CurDBMetaData.getColumnObjectByFieldName(CurDBMetaData.GroupFieldNames[i], _baddAliasFieldNames); 227cdf0e10cSrcweir m_queryComposer.appendGroupByColumn(xColumn); 228cdf0e10cSrcweir } 229cdf0e10cSrcweir } 230cdf0e10cSrcweir setDBMetaData(QueryMetaData _oDBMetaData)231cdf0e10cSrcweir public void setDBMetaData(QueryMetaData _oDBMetaData) 232cdf0e10cSrcweir { 233cdf0e10cSrcweir this.CurDBMetaData = _oDBMetaData; 234cdf0e10cSrcweir } 235cdf0e10cSrcweir replaceConditionsByAlias(PropertyValue _filterconditions[][])236cdf0e10cSrcweir private PropertyValue[][] replaceConditionsByAlias(PropertyValue _filterconditions[][]) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir XColumnsSupplier columnSup = UnoRuntime.queryInterface(XColumnsSupplier.class, m_xQueryAnalyzer); 239cdf0e10cSrcweir XNameAccess columns = columnSup.getColumns(); 240cdf0e10cSrcweir for (int n = 0; n < _filterconditions.length; n++) 241cdf0e10cSrcweir { 242cdf0e10cSrcweir for (int m = 0; m < _filterconditions[n].length; m++) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir // _filterconditions[n][m].Name = getComposedAliasFieldName(_filterconditions[n][m].Name); 245cdf0e10cSrcweir final String aliasName = getComposedAliasFieldName(_filterconditions[n][m].Name); 246cdf0e10cSrcweir if ( columns.hasByName(aliasName)) 247cdf0e10cSrcweir _filterconditions[n][m].Name = aliasName; 248cdf0e10cSrcweir } 249cdf0e10cSrcweir } 250cdf0e10cSrcweir return _filterconditions; 251cdf0e10cSrcweir } 252cdf0e10cSrcweir getQuery()253cdf0e10cSrcweir public String getQuery() 254cdf0e10cSrcweir { 255cdf0e10cSrcweir return m_xQueryAnalyzer.getQuery(); 256cdf0e10cSrcweir } 257cdf0e10cSrcweir getFromClause()258cdf0e10cSrcweir public StringBuilder getFromClause() 259cdf0e10cSrcweir { 260cdf0e10cSrcweir StringBuilder sFromClause = new StringBuilder("FROM"); 261cdf0e10cSrcweir composedCommandNames.clear(); 262cdf0e10cSrcweir String[] sCommandNames = CurDBMetaData.getIncludedCommandNames(); 263cdf0e10cSrcweir for (int i = 0; i < sCommandNames.length; i++) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir CommandName curCommandName = new CommandName(CurDBMetaData, sCommandNames[i]); //(setComposedCommandName) 266cdf0e10cSrcweir curCommandName.setAliasName(getuniqueAliasName(curCommandName.getTableName())); 267cdf0e10cSrcweir sFromClause.append(" ").append(curCommandName.getComposedName()).append(" ").append(quoteName(curCommandName.getAliasName())); 268cdf0e10cSrcweir if (i < sCommandNames.length - 1) 269cdf0e10cSrcweir { 270cdf0e10cSrcweir sFromClause.append(", "); 271cdf0e10cSrcweir } 272cdf0e10cSrcweir // fill composedCommandNames 273cdf0e10cSrcweir composedCommandNames.add(curCommandName); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir return sFromClause; 276cdf0e10cSrcweir } 277cdf0e10cSrcweir setQueryCommand(XWindow _xParentWindow, boolean _bincludeGrouping, boolean _baddAliasFieldNames)278cdf0e10cSrcweir public boolean setQueryCommand(XWindow _xParentWindow, boolean _bincludeGrouping, boolean _baddAliasFieldNames) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir return setQueryCommand(_xParentWindow, _bincludeGrouping, _baddAliasFieldNames, true); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir setQueryCommand(XWindow _xParentWindow, boolean _bincludeGrouping, boolean _baddAliasFieldNames, boolean addQuery)283cdf0e10cSrcweir public boolean setQueryCommand(XWindow _xParentWindow, boolean _bincludeGrouping, boolean _baddAliasFieldNames, boolean addQuery) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir try 286cdf0e10cSrcweir { 287cdf0e10cSrcweir bincludeGrouping = _bincludeGrouping; 288cdf0e10cSrcweir if (addQuery) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir StringBuilder fromClause = getFromClause(); 291cdf0e10cSrcweir String sSelectClause = getSelectClause(_baddAliasFieldNames); 292cdf0e10cSrcweir StringBuilder queryclause = new StringBuilder(sSelectClause).append(" ").append(fromClause); 293cdf0e10cSrcweir m_xQueryAnalyzer.setQuery(queryclause.toString()); 294cdf0e10cSrcweir if (CurDBMetaData.getFilterConditions() != null && CurDBMetaData.getFilterConditions().length > 0) 295cdf0e10cSrcweir { 296cdf0e10cSrcweir CurDBMetaData.setFilterConditions(replaceConditionsByAlias(CurDBMetaData.getFilterConditions())); 297cdf0e10cSrcweir m_queryComposer.setStructuredFilter(CurDBMetaData.getFilterConditions()); 298cdf0e10cSrcweir } 299cdf0e10cSrcweir } 300cdf0e10cSrcweir if (_bincludeGrouping) 301cdf0e10cSrcweir { 302cdf0e10cSrcweir appendGroupByColumns(_baddAliasFieldNames); 303cdf0e10cSrcweir if (CurDBMetaData.GroupByFilterConditions.length > 0) 304cdf0e10cSrcweir { 305cdf0e10cSrcweir m_queryComposer.setStructuredHavingClause(CurDBMetaData.GroupByFilterConditions); 306cdf0e10cSrcweir } 307cdf0e10cSrcweir } 308cdf0e10cSrcweir appendSortingcriteria(_baddAliasFieldNames); 309cdf0e10cSrcweir 310cdf0e10cSrcweir return true; 311cdf0e10cSrcweir } 312cdf0e10cSrcweir catch (Exception exception) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir exception.printStackTrace(System.out); 315cdf0e10cSrcweir displaySQLErrorDialog(exception, _xParentWindow); 316cdf0e10cSrcweir return false; 317cdf0e10cSrcweir } 318cdf0e10cSrcweir } 319cdf0e10cSrcweir getComposedAliasFieldName(String _fieldname)320cdf0e10cSrcweir private String getComposedAliasFieldName(String _fieldname) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByDisplayName(_fieldname); 323cdf0e10cSrcweir CommandName curComposedCommandName = getComposedCommandByDisplayName(CurFieldColumn.getCommandName()); 324cdf0e10cSrcweir if (curComposedCommandName == null) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir return _fieldname; 327cdf0e10cSrcweir } 328cdf0e10cSrcweir String curAliasName = curComposedCommandName.getAliasName(); 329cdf0e10cSrcweir return quoteName(curAliasName) + "." + quoteName(CurFieldColumn.getFieldName()); 330cdf0e10cSrcweir } 331cdf0e10cSrcweir getComposedCommandByAliasName(String _AliasName)332cdf0e10cSrcweir private CommandName getComposedCommandByAliasName(String _AliasName) 333cdf0e10cSrcweir { 334cdf0e10cSrcweir if (composedCommandNames != null) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir for (CommandName commandName : composedCommandNames) 337cdf0e10cSrcweir { 338cdf0e10cSrcweir if (commandName.getAliasName().equals(_AliasName)) 339cdf0e10cSrcweir { 340cdf0e10cSrcweir return commandName; 341cdf0e10cSrcweir } 342cdf0e10cSrcweir } 343cdf0e10cSrcweir } 344cdf0e10cSrcweir return null; 345cdf0e10cSrcweir } 346cdf0e10cSrcweir getComposedCommandByDisplayName(String _DisplayName)347cdf0e10cSrcweir public CommandName getComposedCommandByDisplayName(String _DisplayName) 348cdf0e10cSrcweir { 349cdf0e10cSrcweir if (composedCommandNames != null) 350cdf0e10cSrcweir { 351cdf0e10cSrcweir for (CommandName commandName : composedCommandNames) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir if (commandName.getDisplayName().equals(_DisplayName)) 354cdf0e10cSrcweir { 355cdf0e10cSrcweir return commandName; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir } 358cdf0e10cSrcweir } 359cdf0e10cSrcweir return null; 360cdf0e10cSrcweir } 361cdf0e10cSrcweir getuniqueAliasName(String _TableName)362cdf0e10cSrcweir public String getuniqueAliasName(String _TableName) 363cdf0e10cSrcweir { 364cdf0e10cSrcweir int a = 0; 365cdf0e10cSrcweir String AliasName = ""; 366cdf0e10cSrcweir boolean bAliasNameexists = true; 367cdf0e10cSrcweir String locAliasName = _TableName; 368cdf0e10cSrcweir while (bAliasNameexists) 369cdf0e10cSrcweir { 370cdf0e10cSrcweir bAliasNameexists = (getComposedCommandByAliasName(locAliasName) != null); 371cdf0e10cSrcweir if (bAliasNameexists) 372cdf0e10cSrcweir { 373cdf0e10cSrcweir a++; 374cdf0e10cSrcweir locAliasName = _TableName + "_" + String.valueOf(a); 375cdf0e10cSrcweir } 376cdf0e10cSrcweir else 377cdf0e10cSrcweir { 378cdf0e10cSrcweir AliasName = locAliasName; 379cdf0e10cSrcweir } 380cdf0e10cSrcweir } 381cdf0e10cSrcweir return AliasName; 382cdf0e10cSrcweir } 383cdf0e10cSrcweir quoteName(String _sname)384cdf0e10cSrcweir private String quoteName(String _sname) 385cdf0e10cSrcweir { 386cdf0e10cSrcweir return CommandName.quoteName(_sname, CurDBMetaData.getIdentifierQuote()); 387cdf0e10cSrcweir } 388cdf0e10cSrcweir displaySQLErrorDialog(Exception _exception, XWindow _xParentWindow)389cdf0e10cSrcweir public void displaySQLErrorDialog(Exception _exception, XWindow _xParentWindow) 390cdf0e10cSrcweir { 391cdf0e10cSrcweir try 392cdf0e10cSrcweir { 393cdf0e10cSrcweir Object oErrorDialog = CurDBMetaData.xMSF.createInstance("com.sun.star.sdb.ErrorMessageDialog"); 394cdf0e10cSrcweir XInitialization xInitialize = UnoRuntime.queryInterface(XInitialization.class, oErrorDialog); 395cdf0e10cSrcweir XExecutableDialog xExecute = UnoRuntime.queryInterface(XExecutableDialog.class, oErrorDialog); 396cdf0e10cSrcweir PropertyValue[] rDispatchArguments = new PropertyValue[3]; 397cdf0e10cSrcweir rDispatchArguments[0] = Properties.createProperty(PropertyNames.PROPERTY_TITLE, Configuration.getProductName(CurDBMetaData.xMSF) + " Base"); 398cdf0e10cSrcweir rDispatchArguments[1] = Properties.createProperty("ParentWindow", _xParentWindow); 399cdf0e10cSrcweir rDispatchArguments[2] = Properties.createProperty("SQLException", _exception); 400cdf0e10cSrcweir xInitialize.initialize(rDispatchArguments); 401cdf0e10cSrcweir xExecute.execute(); 402cdf0e10cSrcweir //TODO dispose??? 403cdf0e10cSrcweir } 404cdf0e10cSrcweir catch (Exception typeexception) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir typeexception.printStackTrace(System.out); 407cdf0e10cSrcweir } 408cdf0e10cSrcweir } 409cdf0e10cSrcweir 410cdf0e10cSrcweir /** 411cdf0e10cSrcweir * retrieves a normalized structured filter 412cdf0e10cSrcweir * 413cdf0e10cSrcweir * <p>XSingleSelectQueryComposer.getStructuredFilter has a strange habit of returning the predicate (equal, not equal, etc) 414cdf0e10cSrcweir * effectively twice: Once as SQLFilterOperator, and once in the value. That is, if you have a term "column <> 3", then 415cdf0e10cSrcweir * you'll get an SQLFilterOperator.NOT_EQUAL (which is fine), <strong>and</strong> the textual value of the condition 416cdf0e10cSrcweir * will read "<> 3". The latter is strange enough, but even more strange is that this behavior is not even consistent: 417cdf0e10cSrcweir * for SQLFilterOperator.EQUAL, the "=" sign is not include in the textual value.</p> 418cdf0e10cSrcweir * 419cdf0e10cSrcweir * <p>To abstract from this weirdness, use this function here, which strips the unwanted tokens from the textual value 420cdf0e10cSrcweir * representation.</p> 421cdf0e10cSrcweir */ getNormalizedStructuredFilter()422cdf0e10cSrcweir public PropertyValue[][] getNormalizedStructuredFilter() 423cdf0e10cSrcweir { 424cdf0e10cSrcweir final PropertyValue[][] structuredFilter = m_queryComposer.getStructuredFilter(); 425cdf0e10cSrcweir for (int i = 0; i < structuredFilter.length; ++i) 426cdf0e10cSrcweir { 427cdf0e10cSrcweir for (int j = 0; j < structuredFilter[i].length; ++j) 428cdf0e10cSrcweir { 429cdf0e10cSrcweir if (!(structuredFilter[i][j].Value instanceof String)) 430cdf0e10cSrcweir { 431cdf0e10cSrcweir continue; 432cdf0e10cSrcweir } 433cdf0e10cSrcweir final StringBuffer textualValue = new StringBuffer((String) structuredFilter[i][j].Value); 434cdf0e10cSrcweir switch (structuredFilter[i][j].Handle) 435cdf0e10cSrcweir { 436cdf0e10cSrcweir case SQLFilterOperator.EQUAL: 437cdf0e10cSrcweir break; 438cdf0e10cSrcweir case SQLFilterOperator.NOT_EQUAL: 439cdf0e10cSrcweir case SQLFilterOperator.LESS_EQUAL: 440cdf0e10cSrcweir case SQLFilterOperator.GREATER_EQUAL: 441cdf0e10cSrcweir textualValue.delete(0, 2); 442cdf0e10cSrcweir break; 443cdf0e10cSrcweir case SQLFilterOperator.LESS: 444cdf0e10cSrcweir case SQLFilterOperator.GREATER: 445cdf0e10cSrcweir textualValue.delete(0, 1); 446cdf0e10cSrcweir break; 447cdf0e10cSrcweir case SQLFilterOperator.NOT_LIKE: 448cdf0e10cSrcweir textualValue.delete(0, 8); 449cdf0e10cSrcweir break; 450cdf0e10cSrcweir case SQLFilterOperator.LIKE: 451cdf0e10cSrcweir textualValue.delete(0, 4); 452cdf0e10cSrcweir break; 453cdf0e10cSrcweir case SQLFilterOperator.SQLNULL: 454cdf0e10cSrcweir textualValue.delete(0, 7); 455cdf0e10cSrcweir break; 456cdf0e10cSrcweir case SQLFilterOperator.NOT_SQLNULL: 457cdf0e10cSrcweir textualValue.delete(0, 11); 458cdf0e10cSrcweir break; 459cdf0e10cSrcweir } 460cdf0e10cSrcweir structuredFilter[i][j].Value = textualValue.toString().trim(); 461cdf0e10cSrcweir } 462cdf0e10cSrcweir } 463cdf0e10cSrcweir return structuredFilter; 464cdf0e10cSrcweir } 465cdf0e10cSrcweir getQueryComposer()466cdf0e10cSrcweir public XSingleSelectQueryComposer getQueryComposer() 467cdf0e10cSrcweir { 468cdf0e10cSrcweir return m_queryComposer; 469cdf0e10cSrcweir } 470cdf0e10cSrcweir } 471