User: vg Date: 2008-07-01 07:43:26+0000 Modified: dba/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java
Log: INTEGRATION: CWS rptfix01 (1.8.2); FILE MERGED 2008/06/24 08:33:12 oj 1.8.2.2: call of invoke corrected 2008/06/19 11:18:17 oj 1.8.2.1: #i90696# handle missing getComposer method and apply filter File Changes: Directory: /dba/reportdesign/java/com/sun/star/report/ ====================================================== File [changed]: SDBCReportDataFactory.java Url: http://dba.openoffice.org/source/browse/dba/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java?r1=1.8&r2=1.9 Delta lines: +92 -5 -------------------- --- SDBCReportDataFactory.java 2008-06-17 12:06:18+0000 1.8 +++ SDBCReportDataFactory.java 2008-07-01 07:43:23+0000 1.9 @@ -75,8 +75,13 @@ public static final String GROUP_EXPRESSIONS = "group-expressions"; public static final String MASTER_VALUES = "master-values"; public static final String DETAIL_COLUMNS = "detail-columns"; + public static final String UNO_FILTER = "Filter"; + private static final String APPLY_FILTER = "ApplyFilter"; private static final String UNO_COMMAND = "Command"; + private static final String UNO_ORDER = "Order"; + + private static final String UNO_APPLY_FILTER = "ApplyFilter"; private static final String UNO_COMMAND_TYPE = "CommandType"; private final XConnection connection; private final XComponentContext m_cmpCtx; @@ -385,6 +390,87 @@ return xFields; } + private XSingleSelectQueryComposer getComposer(final XConnectionTools tools, + final String command, + final int commandType) + { + final Class[] parameter = new Class[2]; + parameter[0] = Integer.class; + parameter[1] = String.class; + try + { + final Object[] param = new Object[2]; + param[0] = new Integer(commandType); + param[1] = command; + return (XSingleSelectQueryComposer) tools.getClass().getMethod("getComposer", parameter).invoke(tools, param); + } + catch (NoSuchMethodException ex) + { + } + catch (IllegalAccessException ex) + { + // should not happen + // assert False + } + catch (java.lang.reflect.InvocationTargetException ex) + { + // should not happen + // assert False + } + try + { + final XMultiServiceFactory factory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, connection); + final XSingleSelectQueryComposer out = (XSingleSelectQueryComposer) UnoRuntime.queryInterface(XSingleSelectQueryComposer.class, factory.createInstance("com.sun.star.sdb.SingleSelectQueryAnalyzer")); + final String quote = connection.getMetaData().getIdentifierQuoteString(); + String statement = command; + switch (commandType) + { + case CommandType.TABLE: + statement = "SELECT * FROM " + quote + command + quote; + break; + case CommandType.QUERY: + { + final XQueriesSupplier xSupplyQueries = (XQueriesSupplier) UnoRuntime.queryInterface(XQueriesSupplier.class, connection); + final XNameAccess queries = xSupplyQueries.getQueries(); + if (queries.hasByName(command)) + { + final XPropertySet prop = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, queries.getByName(command)); + final Boolean escape = (Boolean)prop.getPropertyValue("EscapeProcessing"); + if ( escape.booleanValue() ) + { + statement = (String) prop.getPropertyValue(UNO_COMMAND); + final XSingleSelectQueryComposer composer = getComposer(tools,statement,CommandType.COMMAND); + if ( composer != null ) + { + final String order = (String) prop.getPropertyValue(UNO_ORDER); + if ( order != null && order.length() != 0 ) + composer.setOrder(order); + final Boolean applyFilter = (Boolean)prop.getPropertyValue(UNO_APPLY_FILTER); + if ( applyFilter.booleanValue() ) + { + final String filter = (String) prop.getPropertyValue(UNO_FILTER); + if ( filter != null && filter.length() != 0 ) + composer.setFilter(filter); + } + statement = composer.getQuery(); + } + } + } + } + break; + case CommandType.COMMAND: + statement = command; + break; + } + out.setElementaryQuery(statement); + return out; + } + catch (Exception e) + { + } + return null; + } + int fillParameter(final Map parameters, final XConnectionTools tools, final String command, @@ -396,7 +482,8 @@ WrappedTargetException { int oldParameterCount = 0; - final XSingleSelectQueryComposer composer = tools.getComposer(commandType, command); + + final XSingleSelectQueryComposer composer = getComposer(tools, command, commandType); if (composer != null) { // get old parameter count @@ -480,7 +567,7 @@ new Integer(commandType)); rowSetProp.setPropertyValue(UNO_COMMAND, command); - final String filter = (String) parameters.get("filter"); + final String filter = (String) parameters.get(UNO_FILTER); if (filter != null) { rowSetProp.setPropertyValue("Filter", filter); @@ -508,7 +595,7 @@ if (order.length() > 0 && commandType != CommandType.TABLE) { String statement = command; - final XSingleSelectQueryComposer composer = tools.getComposer(commandType, command); + final XSingleSelectQueryComposer composer = getComposer(tools, command, commandType); if (composer != null) { statement = composer.getQuery(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
