User: rt Date: 2008-06-16 13:02:27+0000 Modified: dba/reportdesign/java/com/sun/star/report/SDBCReportDataFactory.java
Log: INTEGRATION: CWS rptchart02 (1.3.4); FILE MERGED 2008/06/11 12:35:10 oj 1.3.4.10: RESYNC: (1.5-1.6); FILE MERGED 2008/06/09 10:52:10 oj 1.3.4.9: #i89437# check if command is not null 2008/05/27 08:06:15 oj 1.3.4.8: #i77610# handle keep-with-next and may-break-between-rows and keep-together 2008/05/22 08:04:52 oj 1.3.4.7: #i86902# impl author and title functions 2008/05/21 11:56:37 oj 1.3.4.6: RESYNC: (1.4-1.5); FILE MERGED 2008/05/20 08:15:46 oj 1.3.4.5: #i84290# handle statements which can not be parsed 2008/05/16 10:01:31 oj 1.3.4.4: #i89370# use string instead of bigDecimal 2008/04/21 12:53:37 oj 1.3.4.3: export chart for spreadsheet and set default command type as command 2008/04/16 06:20:48 oj 1.3.4.2: RESYNC: (1.3-1.4); FILE MERGED 2008/03/12 09:42:43 oj 1.3.4.1: impl chart handling and some code refactoring 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.6&r2=1.7 Delta lines: +99 -58 --------------------- --- SDBCReportDataFactory.java 2008-05-20 14:11:18+0000 1.6 +++ SDBCReportDataFactory.java 2008-06-16 13:02:25+0000 1.7 @@ -58,6 +58,7 @@ import com.sun.star.task.XInteractionHandler; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -79,6 +80,13 @@ private static final String UNO_COMMAND_TYPE = "CommandType"; private final XConnection connection; private final XComponentContext m_cmpCtx; + private static final int FAILED = 0; + private static final int DONE = 1; + private static final int RETRIEVE_COLUMNS = 2; + private static final int RETRIEVE_OBJECT = 3; + private static final int HANDLE_QUERY = 4; + private static final int HANDLE_TABLE = 5; + private static final int HANDLE_SQL = 6; private static final int FAILED = 0; private static final int DONE = 1; @@ -97,6 +105,10 @@ { try { + if (command == null) + { + return new SDBCReportData(null); + } int commandType = CommandType.COMMAND; final String commandTypeValue = (String) parameters.get(COMMAND_TYPE); if (commandTypeValue != null) @@ -391,13 +403,9 @@ WrappedTargetException { int oldParameterCount = 0; - final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); - if (masterValues != null && !masterValues.isEmpty()) - { - // Vector masterColumns = (Vector) parameters.get("master-columns"); - final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); final XSingleSelectQueryComposer composer = tools.getComposer(commandType, command); - + if (composer != null) + { // get old parameter count final XParametersSupplier paraSup = (XParametersSupplier) UnoRuntime.queryInterface(XParametersSupplier.class, composer); if (paraSup != null) @@ -408,6 +416,12 @@ oldParameterCount = params.getCount(); } } + final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); + if (masterValues != null && !masterValues.isEmpty()) + { + // Vector masterColumns = (Vector) parameters.get("master-columns"); + final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); + // create the new filter final String quote = connection.getMetaData().getIdentifierQuoteString(); final StringBuffer oldFilter = new StringBuffer(); @@ -435,8 +449,6 @@ composer.setFilter(oldFilter.toString()); - - final String sQuery = composer.getQuery(); final XPropertySet rowSetProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); rowSetProp.setPropertyValue(UNO_COMMAND, sQuery); @@ -449,15 +461,22 @@ i < masterValues.size(); i++) { - final Object object = masterValues.get(i); + Object object = masterValues.get(i); + if (object instanceof BigDecimal) + { + object = ((BigDecimal) object).toString(); + } para.setObject(oldParameterCount + i + 1, object); } } - return oldParameterCount; } - final XRowSet createRowSet(final String command, final int commandType, final Map parameters) throws Exception + return oldParameterCount; + } + final XRowSet createRowSet(final String command, + final int commandType, final Map parameters) + throws Exception { final XRowSet rowSet = (XRowSet) UnoRuntime.queryInterface(XRowSet.class, m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.sdb.RowSet", m_cmpCtx)); final XPropertySet rowSetProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); @@ -489,27 +508,49 @@ UnknownPropertyException, PropertyVetoException, IllegalArgumentException, - WrappedTargetException + WrappedTargetException, + NoSuchElementException { final StringBuffer order = new StringBuffer(getOrderStatement(commandType, command, (ArrayList) parameters.get(GROUP_EXPRESSIONS))); if (order.length() > 0 && commandType != CommandType.TABLE) { + String statement = command; final XSingleSelectQueryComposer composer = tools.getComposer(commandType, command); - final String sCurrentSQL = composer.getQuery(); - // Magic here, read the nice documentation out of the IDL. - composer.setQuery(sCurrentSQL); + if (composer != null) + { + statement = composer.getQuery(); + composer.setQuery(statement); final String sOldOrder = composer.getOrder(); if (sOldOrder.length() > 0) { order.append(','); order.append(sOldOrder); composer.setOrder(""); - final String sQuery = composer.getQuery(); - rowSetProp.setPropertyValue(UNO_COMMAND, sQuery); - rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, new Integer(CommandType.COMMAND)); + statement = composer.getQuery(); + } + } + else + { + if (commandType == 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 String queryCommand = (String) prop.getPropertyValue(UNO_COMMAND); + statement = "SELECT * FROM (" + queryCommand + ")"; + } + } + else + { + statement = "SELECT * FROM (" + command + ")"; } - + } + rowSetProp.setPropertyValue(UNO_COMMAND, statement); + rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, new Integer(CommandType.COMMAND)); } rowSetProp.setPropertyValue("Order", order.toString()); } } + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
