summaryrefslogtreecommitdiff
path: root/reportdesign/java
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2008-07-01 06:43:23 +0000
committerVladimir Glazounov <vg@openoffice.org>2008-07-01 06:43:23 +0000
commitf28ef72ffe7ef6de77a75c03c61fcb47953f0c18 (patch)
treecf3028417e9c45106d0d01210151419b8a42bd2d /reportdesign/java
parenteb5f04f60bd452c5f7d0103dde26f0be7a4bf431 (diff)
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
Diffstat (limited to 'reportdesign/java')
-rw-r--r--reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java95
1 files changed, 91 insertions, 4 deletions
diff --git a/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java b/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java
index c06e7a315fb2..534cfac7cd1d 100644
--- a/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java
+++ b/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java
@@ -7,7 +7,7 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: SDBCReportDataFactory.java,v $
- * $Revision: 1.8 $
+ * $Revision: 1.9 $
*
* This file is part of OpenOffice.org.
*
@@ -75,8 +75,13 @@ public class SDBCReportDataFactory implements DataSourceFactory
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 @@ public class SDBCReportDataFactory implements DataSourceFactory
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 @@ public class SDBCReportDataFactory implements DataSourceFactory
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 @@ public class SDBCReportDataFactory implements DataSourceFactory
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 @@ public class SDBCReportDataFactory implements DataSourceFactory
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();