From 6f28efc2a8a559cc8c37aa883f4de0b59d4fc79c Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Thu, 7 Mar 2013 08:17:56 +0100 Subject: fdo#61726: rename report-builder package to org.libreoffice.report To prevent future clashes with uno name space rename the com.sun.star.report package to org.libreoffice.report. Bump the version to 1.2.4. Change-Id: Ia06cb7ad8c1528c1d5b5eeb70f1e4b2aa854b70f Reviewed-on: https://gerrit.libreoffice.org/2578 Reviewed-by: David Ostrovsky Tested-by: David Ostrovsky --- reportbuilder/Configuration_reportbuilder.mk | 10 +- reportbuilder/Extension_reportbuilder.mk | 2 +- reportbuilder/Jar_reportbuilder.mk | 456 +++--- .../java/com/sun/star/report/DataRow.java | 36 - .../java/com/sun/star/report/DataSource.java | 38 - .../com/sun/star/report/DataSourceException.java | 84 - .../com/sun/star/report/DataSourceFactory.java | 33 - .../java/com/sun/star/report/ImageService.java | 57 - .../java/com/sun/star/report/InputRepository.java | 78 - .../sun/star/report/JobDefinitionException.java | 54 - .../com/sun/star/report/JobProgressIndicator.java | 69 - .../java/com/sun/star/report/JobProperties.java | 36 - .../java/com/sun/star/report/OfficeToken.java | 52 - .../java/com/sun/star/report/OutputRepository.java | 61 - .../java/com/sun/star/report/ParameterMap.java | 59 - .../java/com/sun/star/report/ReportAddIn.java | 36 - .../com/sun/star/report/ReportEngineMetaData.java | 50 - .../star/report/ReportEngineParameterNames.java | 46 - .../sun/star/report/ReportExecutionException.java | 77 - .../java/com/sun/star/report/ReportExpression.java | 42 - .../sun/star/report/ReportExpressionMetaData.java | 38 - .../java/com/sun/star/report/ReportFunction.java | 35 - .../java/com/sun/star/report/ReportJob.java | 81 - .../com/sun/star/report/ReportJobDefinition.java | 47 - .../java/com/sun/star/report/ReportJobFactory.java | 28 - .../java/com/sun/star/report/SDBCReportData.java | 367 ----- .../com/sun/star/report/SDBCReportDataFactory.java | 581 ------- .../java/com/sun/star/report/SOImageService.java | 177 -- .../com/sun/star/report/StorageRepository.java | 343 ---- .../function/metadata/Author-Function.properties | 21 - .../metadata/Author-Function_en_US.properties | 21 - .../report/function/metadata/AuthorFunction.java | 48 - .../metadata/AuthorFunctionDescription.java | 57 - .../metadata/MetaDataFunctionCategory.java | 33 - .../function/metadata/Title-Function.properties | 21 - .../metadata/Title-Function_en_US.properties | 21 - .../report/function/metadata/TitleFunction.java | 52 - .../metadata/TitleFunctionDescription.java | 57 - .../report/function/metadata/category.properties | 21 - .../function/metadata/category_en_US.properties | 21 - .../star/report/pentaho/DefaultNameGenerator.java | 147 -- .../java/com/sun/star/report/pentaho/Manifest.mf | 7 - .../sun/star/report/pentaho/OfficeNamespaces.java | 62 - .../star/report/pentaho/PentahoFormulaContext.java | 84 - .../star/report/pentaho/PentahoReportAddIn.java | 51 - .../star/report/pentaho/PentahoReportEngine.java | 61 - .../pentaho/PentahoReportEngineMetaData.java | 138 -- .../sun/star/report/pentaho/PentahoReportJob.java | 410 ----- .../star/report/pentaho/SOFormulaOpCodeMapper.java | 144 -- .../sun/star/report/pentaho/SOFormulaParser.java | 434 ----- .../sun/star/report/pentaho/SOFunctionManager.java | 158 -- .../star/report/pentaho/SOReportJobFactory.java | 420 ----- .../star/report/pentaho/StarFunctionCategory.java | 166 -- .../report/pentaho/StarFunctionDescription.java | 199 --- .../sun/star/report/pentaho/StarReportData.java | 159 -- .../star/report/pentaho/StarReportDataFactory.java | 116 -- .../sun/star/report/pentaho/StarReportModule.java | 47 - .../star/report/pentaho/configuration.properties | 147 -- .../report/pentaho/expressions/SumExpression.java | 47 - .../pentaho/expressions/SumExpressionMetaData.java | 69 - .../AbstractReportElementLayoutController.java | 150 -- .../layoutprocessor/FixedTextLayoutController.java | 76 - .../layoutprocessor/FormatValueUtility.java | 363 ----- .../FormattedTextLayoutController.java | 219 --- .../layoutprocessor/ImageElementContext.java | 81 - .../ImageElementLayoutController.java | 311 ---- .../layoutprocessor/ObjectOleLayoutController.java | 112 -- .../OfficeDetailLayoutController.java | 150 -- ...OfficeGroupInstanceSectionLayoutController.java | 170 -- .../OfficeGroupLayoutController.java | 195 --- .../OfficeGroupSectionLayoutController.java | 99 -- .../OfficePageSectionLayoutController.java | 47 - .../OfficeRepeatingStructureLayoutController.java | 34 - .../OfficeReportLayoutController.java | 260 --- .../OfficeTableLayoutController.java | 69 - .../OfficeTableTemplateLayoutController.java | 179 -- .../layoutprocessor/TableCellLayoutController.java | 228 --- .../layoutprocessor/VariablesCollection.java | 87 - .../VariablesDeclarationLayoutController.java | 181 -- .../pentaho/loader/InputRepositoryLoader.java | 180 -- .../loader/InputRepositoryResourceData.java | 76 - .../report/pentaho/loader/InputResourceKey.java | 53 - .../sun/star/report/pentaho/model/DataStyle.java | 45 - .../report/pentaho/model/FixedTextElement.java | 42 - .../report/pentaho/model/FontFaceDeclsSection.java | 64 - .../star/report/pentaho/model/FontFaceElement.java | 45 - .../star/report/pentaho/model/FormatCondition.java | 57 - .../report/pentaho/model/FormattedTextElement.java | 48 - .../star/report/pentaho/model/ImageElement.java | 77 - .../report/pentaho/model/ObjectOleElement.java | 75 - .../report/pentaho/model/OfficeDetailSection.java | 33 - .../star/report/pentaho/model/OfficeDocument.java | 63 - .../sun/star/report/pentaho/model/OfficeGroup.java | 84 - .../pentaho/model/OfficeGroupInstanceSection.java | 33 - .../report/pentaho/model/OfficeGroupSection.java | 44 - .../report/pentaho/model/OfficeMasterPage.java | 56 - .../report/pentaho/model/OfficeMasterStyles.java | 73 - .../star/report/pentaho/model/OfficeReport.java | 138 -- .../sun/star/report/pentaho/model/OfficeStyle.java | 120 -- .../star/report/pentaho/model/OfficeStyles.java | 188 --- .../pentaho/model/OfficeStylesCollection.java | 113 -- .../report/pentaho/model/OfficeTableSection.java | 32 - .../sun/star/report/pentaho/model/PageLayout.java | 58 - .../sun/star/report/pentaho/model/PageSection.java | 50 - .../com/sun/star/report/pentaho/model/RawText.java | 36 - .../star/report/pentaho/model/ReportElement.java | 100 -- .../report/pentaho/model/TableCellElement.java | 33 - .../pentaho/model/VariablesDeclarationSection.java | 42 - .../com/sun/star/report/pentaho/module.properties | 36 - .../sun/star/report/pentaho/oasis-datastyle.css | 23 - .../com/sun/star/report/pentaho/oasis-draw.css | 5 - .../com/sun/star/report/pentaho/oasis-form.css | 5 - .../com/sun/star/report/pentaho/oasis-style.css | 28 - .../com/sun/star/report/pentaho/oasis-table.css | 55 - .../com/sun/star/report/pentaho/oasis-text.css | 27 - .../star/report/pentaho/output/ImageProducer.java | 488 ------ .../pentaho/output/OfficeDocumentReportTarget.java | 1722 -------------------- .../star/report/pentaho/output/OleProducer.java | 126 -- .../star/report/pentaho/output/StyleUtilities.java | 605 ------- .../star/report/pentaho/output/StylesWriter.java | 380 ----- .../output/chart/ChartRawReportProcessor.java | 96 -- .../pentaho/output/chart/ChartRawReportTarget.java | 247 --- .../spreadsheet/SpreadsheetRawReportProcessor.java | 109 -- .../spreadsheet/SpreadsheetRawReportTarget.java | 959 ----------- .../pentaho/output/text/MasterPageFactory.java | 407 ----- .../pentaho/output/text/PageBreakDefinition.java | 39 - .../report/pentaho/output/text/PageContext.java | 218 --- .../output/text/TextRawReportProcessor.java | 106 -- .../pentaho/output/text/TextRawReportTarget.java | 1444 ---------------- .../pentaho/output/text/VariablesDeclarations.java | 98 -- .../pentaho/parser/AttributeSpecification.java | 48 - .../report/pentaho/parser/ElementReadHandler.java | 81 - .../parser/OfficeDocumentXmlResourceFactory.java | 41 - .../report/pentaho/parser/OfficeParserUtil.java | 182 --- .../parser/OfficeStylesXmlResourceFactory.java | 49 - .../pentaho/parser/StarStyleXmlFactoryModule.java | 53 - .../pentaho/parser/StarXmlFactoryModule.java | 53 - .../star/report/pentaho/parser/StyleMapper.java | 29 - .../pentaho/parser/chart/ChartReadHandler.java | 99 -- .../pentaho/parser/data/DataStyleReadHandler.java | 121 -- .../pentaho/parser/draw/ObjectOleReadHandler.java | 75 - .../pentaho/parser/office/BodyReadHandler.java | 82 - .../parser/office/DocumentContentReadHandler.java | 227 --- .../parser/office/DocumentStylesReadHandler.java | 96 -- .../parser/office/FontFaceDeclsReadHandler.java | 107 -- .../parser/office/MasterStylesReadHandler.java | 113 -- .../report/pentaho/parser/rpt-schema-v1.0-os.xsd | 405 ----- .../rpt/ConditionalPrintExpressionReadHandler.java | 71 - .../parser/rpt/DetailRootTableReadHandler.java | 29 - .../parser/rpt/FixedContentReadHandler.java | 88 - .../parser/rpt/FormatConditionReadHandler.java | 90 - .../parser/rpt/FormattedTextReadHandler.java | 108 -- .../pentaho/parser/rpt/FunctionReadHandler.java | 106 -- .../pentaho/parser/rpt/GroupReadHandler.java | 172 -- .../parser/rpt/GroupSectionReadHandler.java | 29 - .../pentaho/parser/rpt/ImageReadHandler.java | 131 -- .../parser/rpt/MasterDetailReadHandler.java | 96 -- .../parser/rpt/ReportElementReadHandler.java | 100 -- .../pentaho/parser/rpt/ReportReadHandler.java | 232 --- .../pentaho/parser/rpt/RootTableReadHandler.java | 96 -- .../pentaho/parser/rpt/SubDocumentReadHandler.java | 124 -- .../report/pentaho/parser/selectors.properties | 104 -- .../star/report/pentaho/parser/style-mapping.txt | 8 - .../pentaho/parser/style/FontFaceReadHandler.java | 46 - .../parser/style/MasterPageReadHandler.java | 95 -- .../parser/style/OfficeStyleReadHandler.java | 96 -- .../parser/style/OfficeStylesReadHandler.java | 130 -- .../parser/style/PageLayoutReadHandler.java | 94 -- .../parser/style/StyleDefinitionReadHandler.java | 90 - .../parser/stylemapper/OneOfConstantsMapper.java | 68 - .../draw/TextAreaVerticalAlignMapper.java | 36 - .../stylemapper/fo/BackgroundColorMapper.java | 41 - .../parser/stylemapper/fo/BorderRightMapper.java | 34 - .../pentaho/parser/stylemapper/fo/ColorMapper.java | 43 - .../parser/stylemapper/fo/FontSizeMapper.java | 37 - .../parser/stylemapper/fo/FontStyleMapper.java | 37 - .../parser/stylemapper/fo/FontWeightMapper.java | 37 - .../parser/stylemapper/fo/TextAlignMapper.java | 38 - .../stylemapper/style/FontFamilyGenericMapper.java | 56 - .../parser/stylemapper/style/FontFamilyMapper.java | 56 - .../parser/stylemapper/style/FontNameMapper.java | 40 - .../parser/stylemapper/style/FontPitchMapper.java | 34 - .../parser/stylemapper/style/FontReliefMapper.java | 37 - .../stylemapper/style/TextEmphasizeMapper.java | 36 - .../style/TextUnderlineColorMapper.java | 45 - .../style/TextUnderlineStyleMapper.java | 40 - .../style/TextUnderlineWidthMapper.java | 67 - .../stylemapper/style/TextUnderlineWordMode.java | 34 - .../stylemapper/style/VerticalAlignMapper.java | 38 - .../stylemapper/table/ColumnWidthMapper.java | 43 - .../parser/stylemapper/table/RowHeightMapper.java | 43 - .../parser/table/CoveredCellReadHandler.java | 44 - .../pentaho/parser/table/TableCellReadHandler.java | 36 - .../parser/table/TableColumnReadHandler.java | 43 - .../parser/table/TableColumnsReadHandler.java | 93 -- .../pentaho/parser/table/TableReadHandler.java | 135 -- .../pentaho/parser/table/TableRowReadHandler.java | 116 -- .../pentaho/parser/table/TableRowsReadHandler.java | 89 - .../parser/text/NoCDATATextContentReadHandler.java | 182 --- .../parser/text/TextContentReadHandler.java | 60 - .../pentaho/parser/xlink/XLinkReadHandler.java | 87 - .../java/com/sun/star/report/pentaho/smil.css | 5 - .../com/sun/star/report/pentaho/star-office.css | 5 - .../com/sun/star/report/pentaho/star-report.css | 91 -- .../java/com/sun/star/report/pentaho/star-rpt.css | 5 - .../report/pentaho/styles/LengthCalculator.java | 100 -- .../star/report/pentaho/styles/StyleMapper.java | 86 - .../star/report/pentaho/styles/StyleMapperKey.java | 108 -- .../styles/StyleMapperXmlFactoryModule.java | 60 - .../styles/StyleMapperXmlResourceFactory.java | 46 - .../styles/StyleMappingDocumentReadHandler.java | 96 -- .../pentaho/styles/StyleMappingReadHandler.java | 91 -- .../report/pentaho/styles/StyleMappingRule.java | 54 - .../sun/star/report/pentaho/styles/stylemapper.xml | 763 --------- .../sun/star/report/pentaho/styles/stylemapper.xsd | 81 - .../java/com/sun/star/report/pentaho/svg.css | 5 - .../java/com/sun/star/report/pentaho/xsl-fo.css | 5 - .../sun/star/report/util/DefaultJobProperties.java | 71 - .../sun/star/report/util/DefaultParameterMap.java | 114 -- .../report/util/DefaultReportJobDefinition.java | 107 -- .../com/sun/star/report/util/ManifestWriter.java | 113 -- reportbuilder/java/jfreereport.properties | 2 +- reportbuilder/java/libformula.properties | 8 +- reportbuilder/java/loader.properties | 6 +- .../java/org/libreoffice/report/DataRow.java | 36 + .../java/org/libreoffice/report/DataSource.java | 38 + .../libreoffice/report/DataSourceException.java | 84 + .../org/libreoffice/report/DataSourceFactory.java | 33 + .../java/org/libreoffice/report/ImageService.java | 57 + .../org/libreoffice/report/InputRepository.java | 78 + .../libreoffice/report/JobDefinitionException.java | 54 + .../libreoffice/report/JobProgressIndicator.java | 69 + .../java/org/libreoffice/report/JobProperties.java | 36 + .../java/org/libreoffice/report/OfficeToken.java | 52 + .../org/libreoffice/report/OutputRepository.java | 61 + .../java/org/libreoffice/report/ParameterMap.java | 59 + .../java/org/libreoffice/report/ReportAddIn.java | 36 + .../libreoffice/report/ReportEngineMetaData.java | 50 + .../report/ReportEngineParameterNames.java | 46 + .../report/ReportExecutionException.java | 77 + .../org/libreoffice/report/ReportExpression.java | 42 + .../report/ReportExpressionMetaData.java | 38 + .../org/libreoffice/report/ReportFunction.java | 35 + .../java/org/libreoffice/report/ReportJob.java | 81 + .../libreoffice/report/ReportJobDefinition.java | 47 + .../org/libreoffice/report/ReportJobFactory.java | 28 + .../org/libreoffice/report/SDBCReportData.java | 367 +++++ .../libreoffice/report/SDBCReportDataFactory.java | 581 +++++++ .../org/libreoffice/report/SOImageService.java | 177 ++ .../org/libreoffice/report/StorageRepository.java | 343 ++++ .../function/metadata/Author-Function.properties | 21 + .../metadata/Author-Function_en_US.properties | 21 + .../report/function/metadata/AuthorFunction.java | 48 + .../metadata/AuthorFunctionDescription.java | 57 + .../metadata/MetaDataFunctionCategory.java | 33 + .../function/metadata/Title-Function.properties | 21 + .../metadata/Title-Function_en_US.properties | 21 + .../report/function/metadata/TitleFunction.java | 52 + .../metadata/TitleFunctionDescription.java | 57 + .../report/function/metadata/category.properties | 21 + .../function/metadata/category_en_US.properties | 21 + .../report/pentaho/DefaultNameGenerator.java | 147 ++ .../org/libreoffice/report/pentaho/Manifest.mf | 7 + .../report/pentaho/OfficeNamespaces.java | 62 + .../report/pentaho/PentahoFormulaContext.java | 84 + .../report/pentaho/PentahoReportAddIn.java | 51 + .../report/pentaho/PentahoReportEngine.java | 61 + .../pentaho/PentahoReportEngineMetaData.java | 138 ++ .../report/pentaho/PentahoReportJob.java | 410 +++++ .../report/pentaho/SOFormulaOpCodeMapper.java | 144 ++ .../report/pentaho/SOFormulaParser.java | 434 +++++ .../report/pentaho/SOFunctionManager.java | 158 ++ .../report/pentaho/SOReportJobFactory.java | 420 +++++ .../report/pentaho/StarFunctionCategory.java | 166 ++ .../report/pentaho/StarFunctionDescription.java | 199 +++ .../libreoffice/report/pentaho/StarReportData.java | 159 ++ .../report/pentaho/StarReportDataFactory.java | 116 ++ .../report/pentaho/StarReportModule.java | 47 + .../report/pentaho/configuration.properties | 147 ++ .../report/pentaho/expressions/SumExpression.java | 47 + .../pentaho/expressions/SumExpressionMetaData.java | 69 + .../AbstractReportElementLayoutController.java | 150 ++ .../layoutprocessor/FixedTextLayoutController.java | 76 + .../layoutprocessor/FormatValueUtility.java | 363 +++++ .../FormattedTextLayoutController.java | 219 +++ .../layoutprocessor/ImageElementContext.java | 81 + .../ImageElementLayoutController.java | 311 ++++ .../layoutprocessor/ObjectOleLayoutController.java | 112 ++ .../OfficeDetailLayoutController.java | 150 ++ ...OfficeGroupInstanceSectionLayoutController.java | 170 ++ .../OfficeGroupLayoutController.java | 195 +++ .../OfficeGroupSectionLayoutController.java | 99 ++ .../OfficePageSectionLayoutController.java | 47 + .../OfficeRepeatingStructureLayoutController.java | 34 + .../OfficeReportLayoutController.java | 260 +++ .../OfficeTableLayoutController.java | 69 + .../OfficeTableTemplateLayoutController.java | 179 ++ .../layoutprocessor/TableCellLayoutController.java | 228 +++ .../layoutprocessor/VariablesCollection.java | 87 + .../VariablesDeclarationLayoutController.java | 181 ++ .../pentaho/loader/InputRepositoryLoader.java | 180 ++ .../loader/InputRepositoryResourceData.java | 76 + .../report/pentaho/loader/InputResourceKey.java | 53 + .../report/pentaho/model/DataStyle.java | 45 + .../report/pentaho/model/FixedTextElement.java | 42 + .../report/pentaho/model/FontFaceDeclsSection.java | 64 + .../report/pentaho/model/FontFaceElement.java | 45 + .../report/pentaho/model/FormatCondition.java | 57 + .../report/pentaho/model/FormattedTextElement.java | 48 + .../report/pentaho/model/ImageElement.java | 77 + .../report/pentaho/model/ObjectOleElement.java | 75 + .../report/pentaho/model/OfficeDetailSection.java | 33 + .../report/pentaho/model/OfficeDocument.java | 63 + .../report/pentaho/model/OfficeGroup.java | 84 + .../pentaho/model/OfficeGroupInstanceSection.java | 33 + .../report/pentaho/model/OfficeGroupSection.java | 44 + .../report/pentaho/model/OfficeMasterPage.java | 56 + .../report/pentaho/model/OfficeMasterStyles.java | 73 + .../report/pentaho/model/OfficeReport.java | 138 ++ .../report/pentaho/model/OfficeStyle.java | 120 ++ .../report/pentaho/model/OfficeStyles.java | 188 +++ .../pentaho/model/OfficeStylesCollection.java | 113 ++ .../report/pentaho/model/OfficeTableSection.java | 32 + .../report/pentaho/model/PageLayout.java | 58 + .../report/pentaho/model/PageSection.java | 50 + .../libreoffice/report/pentaho/model/RawText.java | 36 + .../report/pentaho/model/ReportElement.java | 100 ++ .../report/pentaho/model/TableCellElement.java | 33 + .../pentaho/model/VariablesDeclarationSection.java | 42 + .../libreoffice/report/pentaho/module.properties | 36 + .../libreoffice/report/pentaho/oasis-datastyle.css | 23 + .../org/libreoffice/report/pentaho/oasis-draw.css | 5 + .../org/libreoffice/report/pentaho/oasis-form.css | 5 + .../org/libreoffice/report/pentaho/oasis-style.css | 28 + .../org/libreoffice/report/pentaho/oasis-table.css | 55 + .../org/libreoffice/report/pentaho/oasis-text.css | 27 + .../report/pentaho/output/ImageProducer.java | 488 ++++++ .../pentaho/output/OfficeDocumentReportTarget.java | 1722 ++++++++++++++++++++ .../report/pentaho/output/OleProducer.java | 126 ++ .../report/pentaho/output/StyleUtilities.java | 605 +++++++ .../report/pentaho/output/StylesWriter.java | 380 +++++ .../output/chart/ChartRawReportProcessor.java | 96 ++ .../pentaho/output/chart/ChartRawReportTarget.java | 247 +++ .../spreadsheet/SpreadsheetRawReportProcessor.java | 109 ++ .../spreadsheet/SpreadsheetRawReportTarget.java | 959 +++++++++++ .../pentaho/output/text/MasterPageFactory.java | 407 +++++ .../pentaho/output/text/PageBreakDefinition.java | 39 + .../report/pentaho/output/text/PageContext.java | 218 +++ .../output/text/TextRawReportProcessor.java | 106 ++ .../pentaho/output/text/TextRawReportTarget.java | 1444 ++++++++++++++++ .../pentaho/output/text/VariablesDeclarations.java | 98 ++ .../pentaho/parser/AttributeSpecification.java | 48 + .../report/pentaho/parser/ElementReadHandler.java | 81 + .../parser/OfficeDocumentXmlResourceFactory.java | 41 + .../report/pentaho/parser/OfficeParserUtil.java | 182 +++ .../parser/OfficeStylesXmlResourceFactory.java | 49 + .../pentaho/parser/StarStyleXmlFactoryModule.java | 53 + .../pentaho/parser/StarXmlFactoryModule.java | 53 + .../report/pentaho/parser/StyleMapper.java | 29 + .../pentaho/parser/chart/ChartReadHandler.java | 99 ++ .../pentaho/parser/data/DataStyleReadHandler.java | 121 ++ .../pentaho/parser/draw/ObjectOleReadHandler.java | 75 + .../pentaho/parser/office/BodyReadHandler.java | 82 + .../parser/office/DocumentContentReadHandler.java | 227 +++ .../parser/office/DocumentStylesReadHandler.java | 96 ++ .../parser/office/FontFaceDeclsReadHandler.java | 107 ++ .../parser/office/MasterStylesReadHandler.java | 113 ++ .../report/pentaho/parser/rpt-schema-v1.0-os.xsd | 405 +++++ .../rpt/ConditionalPrintExpressionReadHandler.java | 71 + .../parser/rpt/DetailRootTableReadHandler.java | 29 + .../parser/rpt/FixedContentReadHandler.java | 88 + .../parser/rpt/FormatConditionReadHandler.java | 90 + .../parser/rpt/FormattedTextReadHandler.java | 108 ++ .../pentaho/parser/rpt/FunctionReadHandler.java | 106 ++ .../pentaho/parser/rpt/GroupReadHandler.java | 172 ++ .../parser/rpt/GroupSectionReadHandler.java | 29 + .../pentaho/parser/rpt/ImageReadHandler.java | 131 ++ .../parser/rpt/MasterDetailReadHandler.java | 96 ++ .../parser/rpt/ReportElementReadHandler.java | 100 ++ .../pentaho/parser/rpt/ReportReadHandler.java | 232 +++ .../pentaho/parser/rpt/RootTableReadHandler.java | 96 ++ .../pentaho/parser/rpt/SubDocumentReadHandler.java | 124 ++ .../report/pentaho/parser/selectors.properties | 104 ++ .../report/pentaho/parser/style-mapping.txt | 8 + .../pentaho/parser/style/FontFaceReadHandler.java | 46 + .../parser/style/MasterPageReadHandler.java | 95 ++ .../parser/style/OfficeStyleReadHandler.java | 96 ++ .../parser/style/OfficeStylesReadHandler.java | 130 ++ .../parser/style/PageLayoutReadHandler.java | 94 ++ .../parser/style/StyleDefinitionReadHandler.java | 90 + .../parser/stylemapper/OneOfConstantsMapper.java | 68 + .../draw/TextAreaVerticalAlignMapper.java | 36 + .../stylemapper/fo/BackgroundColorMapper.java | 41 + .../parser/stylemapper/fo/BorderRightMapper.java | 34 + .../pentaho/parser/stylemapper/fo/ColorMapper.java | 43 + .../parser/stylemapper/fo/FontSizeMapper.java | 37 + .../parser/stylemapper/fo/FontStyleMapper.java | 37 + .../parser/stylemapper/fo/FontWeightMapper.java | 37 + .../parser/stylemapper/fo/TextAlignMapper.java | 38 + .../stylemapper/style/FontFamilyGenericMapper.java | 56 + .../parser/stylemapper/style/FontFamilyMapper.java | 56 + .../parser/stylemapper/style/FontNameMapper.java | 40 + .../parser/stylemapper/style/FontPitchMapper.java | 34 + .../parser/stylemapper/style/FontReliefMapper.java | 37 + .../stylemapper/style/TextEmphasizeMapper.java | 36 + .../style/TextUnderlineColorMapper.java | 45 + .../style/TextUnderlineStyleMapper.java | 40 + .../style/TextUnderlineWidthMapper.java | 67 + .../stylemapper/style/TextUnderlineWordMode.java | 34 + .../stylemapper/style/VerticalAlignMapper.java | 38 + .../stylemapper/table/ColumnWidthMapper.java | 43 + .../parser/stylemapper/table/RowHeightMapper.java | 43 + .../parser/table/CoveredCellReadHandler.java | 44 + .../pentaho/parser/table/TableCellReadHandler.java | 36 + .../parser/table/TableColumnReadHandler.java | 43 + .../parser/table/TableColumnsReadHandler.java | 93 ++ .../pentaho/parser/table/TableReadHandler.java | 135 ++ .../pentaho/parser/table/TableRowReadHandler.java | 116 ++ .../pentaho/parser/table/TableRowsReadHandler.java | 89 + .../parser/text/NoCDATATextContentReadHandler.java | 182 +++ .../parser/text/TextContentReadHandler.java | 60 + .../pentaho/parser/xlink/XLinkReadHandler.java | 87 + .../java/org/libreoffice/report/pentaho/smil.css | 5 + .../org/libreoffice/report/pentaho/star-office.css | 5 + .../org/libreoffice/report/pentaho/star-report.css | 91 ++ .../org/libreoffice/report/pentaho/star-rpt.css | 5 + .../report/pentaho/styles/LengthCalculator.java | 100 ++ .../report/pentaho/styles/StyleMapper.java | 86 + .../report/pentaho/styles/StyleMapperKey.java | 108 ++ .../styles/StyleMapperXmlFactoryModule.java | 60 + .../styles/StyleMapperXmlResourceFactory.java | 46 + .../styles/StyleMappingDocumentReadHandler.java | 96 ++ .../pentaho/styles/StyleMappingReadHandler.java | 91 ++ .../report/pentaho/styles/StyleMappingRule.java | 54 + .../report/pentaho/styles/stylemapper.xml | 763 +++++++++ .../report/pentaho/styles/stylemapper.xsd | 81 + .../java/org/libreoffice/report/pentaho/svg.css | 5 + .../java/org/libreoffice/report/pentaho/xsl-fo.css | 5 + .../report/util/DefaultJobProperties.java | 71 + .../report/util/DefaultParameterMap.java | 114 ++ .../report/util/DefaultReportJobDefinition.java | 107 ++ .../libreoffice/report/util/ManifestWriter.java | 113 ++ .../data/org/openoffice/Office/DataAccess.xcu | 2 +- reportbuilder/util/components.rdb | 10 +- reportbuilder/util/description.xml | 2 +- reportbuilder/util/manifest.mf | 2 +- 446 files changed, 26413 insertions(+), 26413 deletions(-) delete mode 100644 reportbuilder/java/com/sun/star/report/DataRow.java delete mode 100644 reportbuilder/java/com/sun/star/report/DataSource.java delete mode 100644 reportbuilder/java/com/sun/star/report/DataSourceException.java delete mode 100644 reportbuilder/java/com/sun/star/report/DataSourceFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/ImageService.java delete mode 100644 reportbuilder/java/com/sun/star/report/InputRepository.java delete mode 100644 reportbuilder/java/com/sun/star/report/JobDefinitionException.java delete mode 100644 reportbuilder/java/com/sun/star/report/JobProgressIndicator.java delete mode 100644 reportbuilder/java/com/sun/star/report/JobProperties.java delete mode 100644 reportbuilder/java/com/sun/star/report/OfficeToken.java delete mode 100644 reportbuilder/java/com/sun/star/report/OutputRepository.java delete mode 100644 reportbuilder/java/com/sun/star/report/ParameterMap.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportAddIn.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportEngineMetaData.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportEngineParameterNames.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportExecutionException.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportExpression.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportExpressionMetaData.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportFunction.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportJob.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportJobDefinition.java delete mode 100644 reportbuilder/java/com/sun/star/report/ReportJobFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/SDBCReportData.java delete mode 100644 reportbuilder/java/com/sun/star/report/SDBCReportDataFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/SOImageService.java delete mode 100644 reportbuilder/java/com/sun/star/report/StorageRepository.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription.java delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/category.properties delete mode 100644 reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/Manifest.mf delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/StarReportData.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/StarReportModule.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/configuration.properties delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/PageSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/RawText.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/module.properties delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/smil.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/star-office.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/star-report.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule.java delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/svg.css delete mode 100644 reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css delete mode 100644 reportbuilder/java/com/sun/star/report/util/DefaultJobProperties.java delete mode 100644 reportbuilder/java/com/sun/star/report/util/DefaultParameterMap.java delete mode 100644 reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition.java delete mode 100644 reportbuilder/java/com/sun/star/report/util/ManifestWriter.java create mode 100644 reportbuilder/java/org/libreoffice/report/DataRow.java create mode 100644 reportbuilder/java/org/libreoffice/report/DataSource.java create mode 100644 reportbuilder/java/org/libreoffice/report/DataSourceException.java create mode 100644 reportbuilder/java/org/libreoffice/report/DataSourceFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/ImageService.java create mode 100644 reportbuilder/java/org/libreoffice/report/InputRepository.java create mode 100644 reportbuilder/java/org/libreoffice/report/JobDefinitionException.java create mode 100644 reportbuilder/java/org/libreoffice/report/JobProgressIndicator.java create mode 100644 reportbuilder/java/org/libreoffice/report/JobProperties.java create mode 100644 reportbuilder/java/org/libreoffice/report/OfficeToken.java create mode 100644 reportbuilder/java/org/libreoffice/report/OutputRepository.java create mode 100644 reportbuilder/java/org/libreoffice/report/ParameterMap.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportAddIn.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportEngineMetaData.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportEngineParameterNames.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportExecutionException.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportExpression.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportExpressionMetaData.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportFunction.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportJob.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportJobDefinition.java create mode 100644 reportbuilder/java/org/libreoffice/report/ReportJobFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/SDBCReportData.java create mode 100644 reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/SOImageService.java create mode 100644 reportbuilder/java/org/libreoffice/report/StorageRepository.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function.properties create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function_en_US.properties create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunction.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunctionDescription.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/MetaDataFunctionCategory.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function.properties create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function_en_US.properties create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunction.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunctionDescription.java create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/category.properties create mode 100644 reportbuilder/java/org/libreoffice/report/function/metadata/category_en_US.properties create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/DefaultNameGenerator.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/Manifest.mf create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/OfficeNamespaces.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/PentahoFormulaContext.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportAddIn.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngine.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngineMetaData.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportJob.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaOpCodeMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaParser.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/SOFunctionManager.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/SOReportJobFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionCategory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionDescription.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/StarReportData.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/StarReportModule.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/configuration.properties create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpression.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpressionMetaData.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FixedTextLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormatValueUtility.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormattedTextLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementContext.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ObjectOleLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeReportLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/TableCellLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesCollection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryLoader.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryResourceData.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/loader/InputResourceKey.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/DataStyle.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/FixedTextElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceDeclsSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/FormatCondition.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/FormattedTextElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/ImageElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/ObjectOleElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDetailSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDocument.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroup.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupInstanceSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterPage.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterStyles.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeReport.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyle.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyles.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStylesCollection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeTableSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/PageLayout.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/PageSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/RawText.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/ReportElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/TableCellElement.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/model/VariablesDeclarationSection.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/module.properties create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-datastyle.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-draw.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-form.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-style.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-table.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/oasis-text.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/ImageProducer.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/OfficeDocumentReportTarget.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/OleProducer.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/StylesWriter.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportProcessor.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportTarget.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/MasterPageFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageBreakDefinition.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageContext.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportProcessor.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/output/text/VariablesDeclarations.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/AttributeSpecification.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/ElementReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeParserUtil.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeStylesXmlResourceFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/StarStyleXmlFactoryModule.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/StarXmlFactoryModule.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/StyleMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/chart/ChartReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/data/DataStyleReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/draw/ObjectOleReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/office/BodyReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentContentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentStylesReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/office/FontFaceDeclsReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/office/MasterStylesReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt-schema-v1.0-os.xsd create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/DetailRootTableReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FixedContentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormatConditionReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormattedTextReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FunctionReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupSectionReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ImageReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/MasterDetailReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportElementReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/RootTableReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/SubDocumentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/selectors.properties create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style-mapping.txt create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/FontFaceReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/MasterPageReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStyleReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStylesReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/PageLayoutReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/style/StyleDefinitionReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/ColorMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontNameMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontPitchMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontReliefMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/RowHeightMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/CoveredCellReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableCellReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnsReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowsReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/text/NoCDATATextContentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/text/TextContentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/parser/xlink/XLinkReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/smil.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/star-office.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/star-report.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/star-rpt.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/LengthCalculator.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapper.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperKey.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlFactoryModule.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlResourceFactory.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingDocumentReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingReadHandler.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingRule.java create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xml create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xsd create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/svg.css create mode 100644 reportbuilder/java/org/libreoffice/report/pentaho/xsl-fo.css create mode 100644 reportbuilder/java/org/libreoffice/report/util/DefaultJobProperties.java create mode 100644 reportbuilder/java/org/libreoffice/report/util/DefaultParameterMap.java create mode 100644 reportbuilder/java/org/libreoffice/report/util/DefaultReportJobDefinition.java create mode 100644 reportbuilder/java/org/libreoffice/report/util/ManifestWriter.java (limited to 'reportbuilder') diff --git a/reportbuilder/Configuration_reportbuilder.mk b/reportbuilder/Configuration_reportbuilder.mk index 4690cfcb61d6..14239aa46b4a 100644 --- a/reportbuilder/Configuration_reportbuilder.mk +++ b/reportbuilder/Configuration_reportbuilder.mk @@ -25,23 +25,23 @@ # in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable # instead of those above. -$(eval $(call gb_Configuration_Configuration,sun-report-builder,nodeliver)) +$(eval $(call gb_Configuration_Configuration,report-builder,nodeliver)) -$(eval $(call gb_Configuration_use_configuration,sun-report-builder,registry)) +$(eval $(call gb_Configuration_use_configuration,report-builder,registry)) -$(eval $(call gb_Configuration_add_schemas,sun-report-builder,reportbuilder/registry/schema,\ +$(eval $(call gb_Configuration_add_schemas,report-builder,reportbuilder/registry/schema,\ org/openoffice/Office/ReportDesign.xcs \ org/openoffice/Office/UI/DbReportWindowState.xcs \ org/openoffice/Office/UI/ReportCommands.xcs \ )) -$(eval $(call gb_Configuration_add_datas,sun-report-builder,reportbuilder/registry/data,\ +$(eval $(call gb_Configuration_add_datas,report-builder,reportbuilder/registry/data,\ org/openoffice/Office/Paths.xcu \ org/openoffice/Office/ReportDesign.xcu \ org/openoffice/Office/UI/Controller.xcu \ )) -$(eval $(call gb_Configuration_add_localized_datas,sun-report-builder,reportbuilder/registry/data,\ +$(eval $(call gb_Configuration_add_localized_datas,report-builder,reportbuilder/registry/data,\ org/openoffice/Office/Accelerators.xcu \ org/openoffice/Office/DataAccess.xcu \ org/openoffice/Office/Embedding.xcu \ diff --git a/reportbuilder/Extension_reportbuilder.mk b/reportbuilder/Extension_reportbuilder.mk index f42134f92996..342522ef1ea0 100644 --- a/reportbuilder/Extension_reportbuilder.mk +++ b/reportbuilder/Extension_reportbuilder.mk @@ -32,7 +32,7 @@ $(eval $(call gb_Extension_use_default_license,report-builder)) $(eval $(call gb_Extension_add_files,report-builder,,\ $(call gb_Jar_get_outdir_target,reportbuilderwizard) \ - $(call gb_Jar_get_outdir_target,sun-report-builder) \ + $(call gb_Jar_get_outdir_target,report-builder) \ $(SRCDIR)/reportbuilder/license/readme_en-US.html \ $(SRCDIR)/reportbuilder/license/readme_en-US.txt \ $(SRCDIR)/reportbuilder/util/components.rdb \ diff --git a/reportbuilder/Jar_reportbuilder.mk b/reportbuilder/Jar_reportbuilder.mk index 4ac4987df52e..1fa82b6fbe67 100644 --- a/reportbuilder/Jar_reportbuilder.mk +++ b/reportbuilder/Jar_reportbuilder.mk @@ -25,9 +25,9 @@ # in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable # instead of those above. -$(eval $(call gb_Jar_Jar,sun-report-builder)) +$(eval $(call gb_Jar_Jar,report-builder)) -$(eval $(call gb_Jar_use_jars,sun-report-builder,\ +$(eval $(call gb_Jar_use_jars,report-builder,\ java_uno \ juh \ jurt \ @@ -35,7 +35,7 @@ $(eval $(call gb_Jar_use_jars,sun-report-builder,\ unoil \ )) -$(eval $(call gb_Jar_use_externals,sun-report-builder,\ +$(eval $(call gb_Jar_use_externals,report-builder,\ commons-logging \ flow-engine \ flute \ @@ -50,246 +50,246 @@ $(eval $(call gb_Jar_use_externals,sun-report-builder,\ sac \ )) -$(eval $(call gb_Jar_set_manifest,sun-report-builder,$(SRCDIR)/reportbuilder/util/manifest.mf)) +$(eval $(call gb_Jar_set_manifest,report-builder,$(SRCDIR)/reportbuilder/util/manifest.mf)) -$(eval $(call gb_Jar_set_packageroot,sun-report-builder,com)) +$(eval $(call gb_Jar_set_packageroot,report-builder,org)) -$(eval $(call gb_Jar_add_sourcefiles,sun-report-builder,\ - reportbuilder/java/com/sun/star/report/DataRow \ - reportbuilder/java/com/sun/star/report/DataSource \ - reportbuilder/java/com/sun/star/report/DataSourceException \ - reportbuilder/java/com/sun/star/report/DataSourceFactory \ - reportbuilder/java/com/sun/star/report/ImageService \ - reportbuilder/java/com/sun/star/report/InputRepository \ - reportbuilder/java/com/sun/star/report/JobDefinitionException \ - reportbuilder/java/com/sun/star/report/JobProgressIndicator \ - reportbuilder/java/com/sun/star/report/JobProperties \ - reportbuilder/java/com/sun/star/report/OfficeToken \ - reportbuilder/java/com/sun/star/report/OutputRepository \ - reportbuilder/java/com/sun/star/report/ParameterMap \ - reportbuilder/java/com/sun/star/report/ReportAddIn \ - reportbuilder/java/com/sun/star/report/ReportEngineMetaData \ - reportbuilder/java/com/sun/star/report/ReportEngineParameterNames \ - reportbuilder/java/com/sun/star/report/ReportExecutionException \ - reportbuilder/java/com/sun/star/report/ReportExpression \ - reportbuilder/java/com/sun/star/report/ReportExpressionMetaData \ - reportbuilder/java/com/sun/star/report/ReportFunction \ - reportbuilder/java/com/sun/star/report/ReportJob \ - reportbuilder/java/com/sun/star/report/ReportJobDefinition \ - reportbuilder/java/com/sun/star/report/ReportJobFactory \ - reportbuilder/java/com/sun/star/report/SDBCReportData \ - reportbuilder/java/com/sun/star/report/SDBCReportDataFactory \ - reportbuilder/java/com/sun/star/report/SOImageService \ - reportbuilder/java/com/sun/star/report/StorageRepository \ - reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction \ - reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription \ - reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory \ - reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction \ - reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription \ - reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator \ - reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces \ - reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext \ - reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn \ - reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine \ - reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData \ - reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob \ - reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper \ - reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser \ - reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager \ - reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory \ - reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory \ - reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription \ - reportbuilder/java/com/sun/star/report/pentaho/StarReportData \ - reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory \ - reportbuilder/java/com/sun/star/report/pentaho/StarReportModule \ - reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression \ - reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection \ - reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController \ - reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader \ - reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData \ - reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey \ - reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle \ - reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition \ - reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection \ - reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout \ - reportbuilder/java/com/sun/star/report/pentaho/model/PageSection \ - reportbuilder/java/com/sun/star/report/pentaho/model/RawText \ - reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement \ - reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection \ - reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer \ - reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget \ - reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer \ - reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities \ - reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter \ - reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor \ - reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget \ - reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor \ - reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget \ - reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations \ - reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification \ - reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory \ - reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil \ - reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory \ - reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule \ - reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule \ - reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler \ - reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule \ - reportbuilder/java/com/sun/star/report/util/DefaultJobProperties \ - reportbuilder/java/com/sun/star/report/util/DefaultParameterMap \ - reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition \ - reportbuilder/java/com/sun/star/report/util/ManifestWriter \ +$(eval $(call gb_Jar_add_sourcefiles,report-builder,\ + reportbuilder/java/org/libreoffice/report/DataRow \ + reportbuilder/java/org/libreoffice/report/DataSource \ + reportbuilder/java/org/libreoffice/report/DataSourceException \ + reportbuilder/java/org/libreoffice/report/DataSourceFactory \ + reportbuilder/java/org/libreoffice/report/ImageService \ + reportbuilder/java/org/libreoffice/report/InputRepository \ + reportbuilder/java/org/libreoffice/report/JobDefinitionException \ + reportbuilder/java/org/libreoffice/report/JobProgressIndicator \ + reportbuilder/java/org/libreoffice/report/JobProperties \ + reportbuilder/java/org/libreoffice/report/OfficeToken \ + reportbuilder/java/org/libreoffice/report/OutputRepository \ + reportbuilder/java/org/libreoffice/report/ParameterMap \ + reportbuilder/java/org/libreoffice/report/ReportAddIn \ + reportbuilder/java/org/libreoffice/report/ReportEngineMetaData \ + reportbuilder/java/org/libreoffice/report/ReportEngineParameterNames \ + reportbuilder/java/org/libreoffice/report/ReportExecutionException \ + reportbuilder/java/org/libreoffice/report/ReportExpression \ + reportbuilder/java/org/libreoffice/report/ReportExpressionMetaData \ + reportbuilder/java/org/libreoffice/report/ReportFunction \ + reportbuilder/java/org/libreoffice/report/ReportJob \ + reportbuilder/java/org/libreoffice/report/ReportJobDefinition \ + reportbuilder/java/org/libreoffice/report/ReportJobFactory \ + reportbuilder/java/org/libreoffice/report/SDBCReportData \ + reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory \ + reportbuilder/java/org/libreoffice/report/SOImageService \ + reportbuilder/java/org/libreoffice/report/StorageRepository \ + reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunction \ + reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunctionDescription \ + reportbuilder/java/org/libreoffice/report/function/metadata/MetaDataFunctionCategory \ + reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunction \ + reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunctionDescription \ + reportbuilder/java/org/libreoffice/report/pentaho/DefaultNameGenerator \ + reportbuilder/java/org/libreoffice/report/pentaho/OfficeNamespaces \ + reportbuilder/java/org/libreoffice/report/pentaho/PentahoFormulaContext \ + reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportAddIn \ + reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngine \ + reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngineMetaData \ + reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportJob \ + reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaOpCodeMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaParser \ + reportbuilder/java/org/libreoffice/report/pentaho/SOFunctionManager \ + reportbuilder/java/org/libreoffice/report/pentaho/SOReportJobFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionCategory \ + reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionDescription \ + reportbuilder/java/org/libreoffice/report/pentaho/StarReportData \ + reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/StarReportModule \ + reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpression \ + reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpressionMetaData \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/AbstractReportElementLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FixedTextLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormatValueUtility \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormattedTextLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementContext \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ObjectOleLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeDetailLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficePageSectionLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeReportLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/TableCellLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesCollection \ + reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController \ + reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryLoader \ + reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryResourceData \ + reportbuilder/java/org/libreoffice/report/pentaho/loader/InputResourceKey \ + reportbuilder/java/org/libreoffice/report/pentaho/model/DataStyle \ + reportbuilder/java/org/libreoffice/report/pentaho/model/FixedTextElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceDeclsSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/FormatCondition \ + reportbuilder/java/org/libreoffice/report/pentaho/model/FormattedTextElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/ImageElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/ObjectOleElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDetailSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDocument \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroup \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupInstanceSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterPage \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterStyles \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeReport \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyle \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyles \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStylesCollection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeTableSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/PageLayout \ + reportbuilder/java/org/libreoffice/report/pentaho/model/PageSection \ + reportbuilder/java/org/libreoffice/report/pentaho/model/RawText \ + reportbuilder/java/org/libreoffice/report/pentaho/model/ReportElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/TableCellElement \ + reportbuilder/java/org/libreoffice/report/pentaho/model/VariablesDeclarationSection \ + reportbuilder/java/org/libreoffice/report/pentaho/output/ImageProducer \ + reportbuilder/java/org/libreoffice/report/pentaho/output/OfficeDocumentReportTarget \ + reportbuilder/java/org/libreoffice/report/pentaho/output/OleProducer \ + reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities \ + reportbuilder/java/org/libreoffice/report/pentaho/output/StylesWriter \ + reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportProcessor \ + reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportTarget \ + reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor \ + reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/MasterPageFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageBreakDefinition \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageContext \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportProcessor \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget \ + reportbuilder/java/org/libreoffice/report/pentaho/output/text/VariablesDeclarations \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/AttributeSpecification \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/ElementReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeDocumentXmlResourceFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeParserUtil \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeStylesXmlResourceFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/StarStyleXmlFactoryModule \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/StarXmlFactoryModule \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/StyleMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/chart/ChartReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/data/DataStyleReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/draw/ObjectOleReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/office/BodyReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentContentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentStylesReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/office/FontFaceDeclsReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/office/MasterStylesReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/DetailRootTableReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FixedContentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormatConditionReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormattedTextReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FunctionReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupSectionReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ImageReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/MasterDetailReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportElementReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/RootTableReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/SubDocumentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/FontFaceReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/MasterPageReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStyleReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStylesReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/PageLayoutReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/style/StyleDefinitionReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/OneOfConstantsMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BorderRightMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/ColorMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontSizeMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontStyleMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontWeightMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/TextAlignMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontNameMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontPitchMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontReliefMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/VerticalAlignMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/ColumnWidthMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/RowHeightMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/CoveredCellReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableCellReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnsReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowsReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/text/NoCDATATextContentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/text/TextContentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/parser/xlink/XLinkReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/LengthCalculator \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapper \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperKey \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlFactoryModule \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlResourceFactory \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingDocumentReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingReadHandler \ + reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingRule \ + reportbuilder/java/org/libreoffice/report/util/DefaultJobProperties \ + reportbuilder/java/org/libreoffice/report/util/DefaultParameterMap \ + reportbuilder/java/org/libreoffice/report/util/DefaultReportJobDefinition \ + reportbuilder/java/org/libreoffice/report/util/ManifestWriter \ )) -$(eval $(call gb_Jar_add_packagefiles,sun-report-builder,,\ +$(eval $(call gb_Jar_add_packagefiles,report-builder,,\ $(SRCDIR)/reportbuilder/java/jfreereport.properties \ $(SRCDIR)/reportbuilder/java/libformula.properties \ $(SRCDIR)/reportbuilder/java/loader.properties \ )) -$(eval $(call gb_Jar_add_packagefiles,sun-report-builder,com/sun/star/report/function/metadata,\ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/category.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties \ +$(eval $(call gb_Jar_add_packagefiles,report-builder,org/libreoffice/report/function/metadata,\ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function_en_US.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function_en_US.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/category.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/function/metadata/category_en_US.properties \ )) -$(eval $(call gb_Jar_add_packagefiles,sun-report-builder,com/sun/star/report/pentaho,\ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/module.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/smil.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/star-office.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/star-report.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/svg.css \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css \ +$(eval $(call gb_Jar_add_packagefiles,report-builder,org/libreoffice/report/pentaho,\ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/configuration.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/module.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-datastyle.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-draw.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-form.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-style.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-table.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/oasis-text.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/smil.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/star-office.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/star-report.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/star-rpt.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/svg.css \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/xsl-fo.css \ )) -$(eval $(call gb_Jar_add_packagefiles,sun-report-builder,com/sun/star/report/pentaho/parser,\ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt \ +$(eval $(call gb_Jar_add_packagefiles,report-builder,org/libreoffice/report/pentaho/parser,\ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt-schema-v1.0-os.xsd \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/parser/selectors.properties \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/parser/style-mapping.txt \ )) -$(eval $(call gb_Jar_add_packagefiles,sun-report-builder,com/sun/star/report/pentaho/styles,\ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml \ - $(SRCDIR)/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd \ +$(eval $(call gb_Jar_add_packagefiles,report-builder,org/libreoffice/report/pentaho/styles,\ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xml \ + $(SRCDIR)/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xsd \ )) # vim: set shiftwidth=4 tabstop=4 noexpandtab: diff --git a/reportbuilder/java/com/sun/star/report/DataRow.java b/reportbuilder/java/com/sun/star/report/DataRow.java deleted file mode 100644 index 0361a9198092..000000000000 --- a/reportbuilder/java/com/sun/star/report/DataRow.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * This feeds data into the reporting engine, in case the data has been provided - * by the caller. The methods are a mix of TableModel methods and methods borrowed - * from the java.sql.ResultSet interface. - * - * The column and row index starts at 1 (as it is done in JDBC). - * - */ -public interface DataRow -{ - - int getColumnCount() throws DataSourceException; - - String getColumnName(int column) throws DataSourceException; - - Object getObject(int column) throws DataSourceException; -} diff --git a/reportbuilder/java/com/sun/star/report/DataSource.java b/reportbuilder/java/com/sun/star/report/DataSource.java deleted file mode 100644 index 420b8d3261f7..000000000000 --- a/reportbuilder/java/com/sun/star/report/DataSource.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * This feeds data into the reporting engine, in case the data has been provided - * by the caller. The methods are a mix of TableModel methods and methods borrowed - * from the java.sql.ResultSet interface. - * - * The column and row index starts at 1 (as it is done in JDBC). - * - */ -public interface DataSource extends DataRow -{ - - int getRowCount() throws DataSourceException; - - boolean absolute(int row) throws DataSourceException; - - boolean next() throws DataSourceException; - - void close() throws DataSourceException; -} diff --git a/reportbuilder/java/com/sun/star/report/DataSourceException.java b/reportbuilder/java/com/sun/star/report/DataSourceException.java deleted file mode 100644 index 3fe7c7985aac..000000000000 --- a/reportbuilder/java/com/sun/star/report/DataSourceException.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * A general exception to indicate that there was an error while accessing the - * datasource. - * - */ -public class DataSourceException extends Exception -{ - - /** - * Constructs a new exception with null as its detail message. - * The cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - */ - public DataSourceException() - { - super(); - } - - /** - * Constructs a new exception with the specified detail message. The cause is - * not initialized, and may subsequently be initialized by a call to {@link - * #initCause}. - * - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public DataSourceException(String message) - { - super(message); - } - - /** - * Constructs a new exception with the specified detail message and cause. - *

Note that the detail message associated with cause is - * not automatically incorporated in this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the {@link - * #getCause()} method). (A null value is permitted, - * and indicates that the cause is nonexistent or unknown.) - * @since 1.4 - */ - public DataSourceException(String message, Throwable cause) - { - super(message, cause); - } - - /** - * Constructs a new exception with the specified cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically contains - * the class and detail message of cause). This constructor is useful - * for exceptions that are little more than wrappers for other throwables (for - * example, {@link PrivilegedActionException}). - * - * @param cause the cause (which is saved for later retrieval by the {@link - * #getCause()} method). (A null value is permitted, - * and indicates that the cause is nonexistent or unknown.) - * @since 1.4 - */ - public DataSourceException(Throwable cause) - { - super(cause); - } -} diff --git a/reportbuilder/java/com/sun/star/report/DataSourceFactory.java b/reportbuilder/java/com/sun/star/report/DataSourceFactory.java deleted file mode 100644 index f0311fae48db..000000000000 --- a/reportbuilder/java/com/sun/star/report/DataSourceFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import java.util.Map; - -/** - * Allows to query the data repository and returns a datasource for the - * specified name and parameters. The parameters-map can be null, if there - * are no parameters required. - * - */ -public interface DataSourceFactory -{ - - public DataSource queryData(String name, Map parameters) - throws DataSourceException; -} diff --git a/reportbuilder/java/com/sun/star/report/ImageService.java b/reportbuilder/java/com/sun/star/report/ImageService.java deleted file mode 100644 index da5e2477a757..000000000000 --- a/reportbuilder/java/com/sun/star/report/ImageService.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.awt.Size; - -import java.io.InputStream; - -public interface ImageService -{ - - /** - * @param image - * @return the mime-type of the image as string. - * @throws ReportExecutionException - */ - String getMimeType(final InputStream image) throws ReportExecutionException; - - /** - * @param image - * @return the mime-type of the image as string. - * @throws ReportExecutionException - */ - String getMimeType(final byte[] image) throws ReportExecutionException; - - /** - * @param image - * @returns the dimension in 100th mm. - * - * @throws ReportExecutionException - * @return*/ - Size getImageSize(final InputStream image) throws ReportExecutionException; - - /** - * @param image - * @returns the dimension in 100th mm. - * - * @throws ReportExecutionException - * @return*/ - Size getImageSize(final byte[] image) throws ReportExecutionException; -} - diff --git a/reportbuilder/java/com/sun/star/report/InputRepository.java b/reportbuilder/java/com/sun/star/report/InputRepository.java deleted file mode 100644 index 18717e3f5ea2..000000000000 --- a/reportbuilder/java/com/sun/star/report/InputRepository.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import java.io.IOException; -import java.io.InputStream; - -/** - * This allows the job processor to load data from a repository. It is assumed, - * that all resource names are given as strings and furthermore, that the names - * identify a resource uniquely within the input repository. - * - * An input repository connects the report processing to the xml definitions. - * Unless defined otherwise, it is assumed, that the input-name is 'content.xml'; - * possible other files are 'settings.xml' and 'styles.xml' (see the Oasis standard - * for details on these files and their contents). - * - */ -public interface InputRepository -{ - - /** - * Returns a unique identifier for this repository. Two repositories accessing - * the same location should return the same id. The identifier must never - * be null. - * - * @return the repository id - */ - Object getId(); - - InputStream createInputStream(final String name) throws IOException; - - /** allows to acces sub repositories inside this repository - * - * @param name describes the path to the sub repository - * @return the sub repository - * @throws java.io.IOException when the sub repository doesn't exist. - */ - InputRepository openInputRepository(final String name) throws IOException; - - /** - * This returns an version number for the given resource. Return zero, if - * the resource is not versionable, else return a unique number for each version. - * As rule of thumb: Increase the version number by at least one for each change - * made to the resource. - * - * @param name the name of the resource - * @return the version number - */ - long getVersion(final String name); - - boolean exists(final String name); - - boolean isReadable(final String name); - - void closeInputRepository(); - - /** returns the URL of the database document - * - * @return the URL of the database document - */ - String getRootURL(); -} diff --git a/reportbuilder/java/com/sun/star/report/JobDefinitionException.java b/reportbuilder/java/com/sun/star/report/JobDefinitionException.java deleted file mode 100644 index bc3bdb6a53f6..000000000000 --- a/reportbuilder/java/com/sun/star/report/JobDefinitionException.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * Creation-Date: 05.02.2006, 17:36:33 - * - */ -public class JobDefinitionException extends RuntimeException -{ - - /** - * Creates a StackableRuntimeException with no message and no parent. - */ - public JobDefinitionException() - { - } - - /** - * Creates an exception. - * - * @param message the exception message. - */ - public JobDefinitionException(final String message) - { - super(message); - } - - /** - * Creates an exception. - * - * @param message the exception message. - * @param ex the parent exception. - */ - public JobDefinitionException(final String message, final Exception ex) - { - super(message, ex); - } -} diff --git a/reportbuilder/java/com/sun/star/report/JobProgressIndicator.java b/reportbuilder/java/com/sun/star/report/JobProgressIndicator.java deleted file mode 100644 index 6d0a87a2f00d..000000000000 --- a/reportbuilder/java/com/sun/star/report/JobProgressIndicator.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * Based on - * http://api.libreoffice.org/docs/common/ref/com/sun/star/task/XStatusIndicator.html - * - */ -public interface JobProgressIndicator -{ - - /** - * Updates the progress description. - * - * @param string the new description - */ - void setText(String string); - - /** - * Initializes the progress indicator and sets the progress description to - * the text given in the parameter text. The progress values - * passed to this indicator will not exceed the given maxValue. - * The value range of this indicator is set to 0 to maxValue - * Stopped indicators must ignore that call. - * - * @param string the progress description - * @param text - * @param maxValue the maximum value - * @see JobProgressIndicator#setText(String) - */ - void start(String text, int maxValue); - - /** - * Updates the value to the specified value. Invalid values must be ignored. - * Stopped indicators must ignore that call. - * - * @param value the new value that should be shown now. This must fit the - * range [0..maxValue] as defined in {@link JobProgressIndicator#start(String, int)}. - */ - void setValue(int value); - - /** - * Stop the progress. A progress indicator cannot be destructed before end() - * has been called. - */ - void end(); - - /** - * Clear progress value and description. Calling of setValue(0) and - * setText("") should do the same. Stopped indicators must ignore this call. - */ - void reset(); -} diff --git a/reportbuilder/java/com/sun/star/report/JobProperties.java b/reportbuilder/java/com/sun/star/report/JobProperties.java deleted file mode 100644 index c4fe1ee69666..000000000000 --- a/reportbuilder/java/com/sun/star/report/JobProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -public interface JobProperties -{ - - void setProperty(String key, Object value) - throws JobDefinitionException; - - Object getProperty(String key); - - /** - * A type safe clone operation. We derive a copy of all properties, - * so that changes to the original job properties collection does not - * affect the copy. - * - * @return a copy. - */ - JobProperties copy(); -} diff --git a/reportbuilder/java/com/sun/star/report/OfficeToken.java b/reportbuilder/java/com/sun/star/report/OfficeToken.java deleted file mode 100644 index e64d536ed662..000000000000 --- a/reportbuilder/java/com/sun/star/report/OfficeToken.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -public class OfficeToken -{ - - public static final String GRAPHIC = "graphic"; - public static final String GRAPHICS = "Graphics"; - public static final String GRAPHIC_PROPERTIES = "graphic-properties"; - public static final String PARAGRAPH = "paragraph"; - public static final String TRUE = "true"; - public static final String FALSE = "false"; - public static final String FRAME = "frame"; - public static final String STYLE_NAME = "style-name"; - public static final String BACKGROUND_COLOR = "background-color"; - public static final String COVERED_TABLE_CELL = "covered-table-cell"; - public static final String TABLE = "table"; - public static final String TABLE_COLUMN = "table-column"; - public static final String TABLE_COLUMNS = "table-columns"; - public static final String TABLE_HEADER_COLUMNS = "table-header-columns"; - public static final String TABLE_HEADER_ROWS = "table-header-rows"; - public static final String TABLE_ROWS = "table-rows"; - public static final String TABLE_ROW = "table-row"; - public static final String TABLE_CELL = "table-cell"; - public static final String P = "p"; - public static final String OBJECT_OLE = "object-ole"; - public static final String IMAGE = "image"; - public static final String IMAGE_DATA = "image-data"; - public static final String PRESERVE_IRI = "preserve-IRI"; - public static final String SCALE = "scale"; - public static final String NAME = "name"; - public static final String SHAPES = "shapes"; - public static final String ISOTROPIC = "isotropic"; - public static final String ANISOTROPIC = "anisotropic"; - public static final String NONE = "none"; -} diff --git a/reportbuilder/java/com/sun/star/report/OutputRepository.java b/reportbuilder/java/com/sun/star/report/OutputRepository.java deleted file mode 100644 index 7c818e67d775..000000000000 --- a/reportbuilder/java/com/sun/star/report/OutputRepository.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * A repository for writing. Providing a repository always assumes, - * that more than one stream can be written. - * - */ -public interface OutputRepository -{ - - /** - * Creates an output stream for writing the data. If there is an entry with - * that name already contained in the repository, try to overwrite it. - * - * @param name - * the name of the output stream - * @param mimeType - * the mime type of the to-be-created output stream. Repository implementations which do not support - * associating a mime time with a stream might ignore this parameter. - * @return the outputstream - * @throws IOException if opening the stream fails - */ - OutputStream createOutputStream(final String name, final String mimeType) throws IOException; - - /** allows to acces sub repositories inside this repository - * - * @param name describes the path to the sub repository - * @param mimeType - * @return the sub repository - * @throws java.io.IOException when the sub repository doesn't exist. - */ - OutputRepository openOutputRepository(final String name, final String mimeType) throws IOException; - - boolean exists(final String name); - - boolean existsStorage(final String name); - - boolean isWritable(final String name); - - void closeOutputRepository(); -} diff --git a/reportbuilder/java/com/sun/star/report/ParameterMap.java b/reportbuilder/java/com/sun/star/report/ParameterMap.java deleted file mode 100644 index 05d140da3083..000000000000 --- a/reportbuilder/java/com/sun/star/report/ParameterMap.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -public interface ParameterMap -{ - - /** - * Adds a property to this properties collection. If a property with the given name - * exist, the property will be replaced with the new value. If the value is null, the - * property will be removed. - * - * @param key the property key. - * @param value the property value. - */ - public void put(final String key, final Object value); - - /** - * Retrieves the value stored for a key in this properties collection. - * - * @param key the property key. - * @return The stored value, or null if the key does not exist in this - * collection. - */ - Object get(final String key); - - /** - * Retrieves the value stored for a key in this properties collection, and returning the - * default value if the key was not stored in this properties collection. - * - * @param key the property key. - * @param defaultValue the default value to be returned when the key is not stored in - * this properties collection. - * @return The stored value, or the default value if the key does not exist in this - * collection. - */ - Object get(final String key, final Object defaultValue); - - String[] keys(); - - void clear(); - - int size(); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportAddIn.java b/reportbuilder/java/com/sun/star/report/ReportAddIn.java deleted file mode 100644 index 8cb44b0a05b8..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportAddIn.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * A report add-in defines a set of expressions, which can - * be used in the reporting. - * - * Each expression must provide meta-data to support GUI implementors. - * Expressions are assumed to be statefull, if they are not, they are - * free to be implemented as stateless expression. - */ -public interface ReportAddIn -{ - - int getExpressionCount(); - - ReportExpression createExpression(int expression); - - ReportExpressionMetaData getMetaData(int expression); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportEngineMetaData.java b/reportbuilder/java/com/sun/star/report/ReportEngineMetaData.java deleted file mode 100644 index ab98ceedfe35..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportEngineMetaData.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -public interface ReportEngineMetaData -{ - - /** - * Checks, whether a certain output type is available. - * Feed the mime-type of the output type in and you'll get - * a true or false back. - * - * @param mimeType - * @return true, if the output type is supported; false otherwise. - */ - boolean isOutputSupported(String mimeType); - - /** - * Lists all supported output parameters for the given mime-type. - * This listing can be used to build a generic user interface for - * configuring a certain output. - * - * @param mimeType - * @return - */ - String[] getOutputParameters(String mimeType); - - Class getParameterType(String parameter); - - boolean isMandatory(String parameter); - - boolean isEnumeration(String parameter); - - Object[] getEnumerationValues(String parameter); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportEngineParameterNames.java b/reportbuilder/java/com/sun/star/report/ReportEngineParameterNames.java deleted file mode 100644 index 8c5352fb4493..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportEngineParameterNames.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * Making this enumeration typesafe and fully defined here would - * be nice, wouldn't it? - */ -public class ReportEngineParameterNames -{ - - public static final String CONTENT_TYPE = "content-type"; - public static final String INPUT_NAME = "input.name"; - public static final String INPUT_REPOSITORY = "input.repository"; - public static final String OUTPUT_NAME = "output.name"; - public static final String OUTPUT_REPOSITORY = "output.repository"; - public static final String INPUT_DATASOURCE_FACTORY = "input.datasource-factory"; - public static final String IMAGE_SERVICE = "ImageService"; - public static final String INPUT_REPORTJOB_FACTORY = "input.reportjob-factory"; - public static final String INPUT_MASTER_COLUMNS = "input.master-columns"; - public static final String INPUT_MASTER_VALUES = "input.master-values"; - public static final String INPUT_DETAIL_COLUMNS = "input.detail-columns"; - public static final String MIMETYPE = "output.mimetype"; - public static final String AUTHOR = "Author"; - public static final String TITLE = "Title"; - public static final String MAXROWS = "MaxRows"; - - private ReportEngineParameterNames() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/ReportExecutionException.java b/reportbuilder/java/com/sun/star/report/ReportExecutionException.java deleted file mode 100644 index 2d67342c40d4..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportExecutionException.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -public class ReportExecutionException extends Exception -{ - - /** - * Constructs a new exception with null as its detail message. The cause is - * not initialized, and may subsequently be initialized by a call to {@link - * #initCause}. - */ - public ReportExecutionException() - { - } - - /** - * Constructs a new exception with the specified cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically contains the class - * and detail message of cause). This constructor is useful for exceptions that - * are little more than wrappers for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * - * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} - * method). (A null value is permitted, and indicates that the - * cause is nonexistent or unknown.) - * @since 1.4 - */ - public ReportExecutionException(Throwable cause) - { - super(cause); - } - - /** - * Constructs a new exception with the specified detail message. The cause is not - * initialized, and may subsequently be initialized by a call to {@link #initCause}. - * - * @param message the detail message. The detail message is saved for later retrieval by - * the {@link #getMessage()} method. - */ - public ReportExecutionException(String message) - { - super(message); - } - - /** - * Constructs a new exception with the specified detail message and cause.

Note that - * the detail message associated with cause is not automatically - * incorporated in this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval by the {@link - * #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the {@link - * #getCause()} method). (A null value is permitted, and - * indicates that the cause is nonexistent or unknown.) - * @since 1.4 - */ - public ReportExecutionException(String message, Throwable cause) - { - super(message, cause); - } -} diff --git a/reportbuilder/java/com/sun/star/report/ReportExpression.java b/reportbuilder/java/com/sun/star/report/ReportExpression.java deleted file mode 100644 index 4b4e549c68ad..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportExpression.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * Expressions are simple computation components. - * - * Expressions are always assumed to be immutable. They are not allowed to - * change their state and it is not guaranteed, in which order they get called. - * If the expression has been called before, the last computed value will be - * available from the datarow. - * - * This construct allows us to write expressions in the form - * "Sum := Sum + Column". - * - * Multiple calls to getValue on the same expression instance must return the - * same value (assuming that the datarow passed in is the same). - */ -public interface ReportExpression -{ - - void setParameters(Object[] parameters); - - Object getParameters(); - - Object getValue(DataRow row); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportExpressionMetaData.java b/reportbuilder/java/com/sun/star/report/ReportExpressionMetaData.java deleted file mode 100644 index bf630c5e0179..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportExpressionMetaData.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import java.util.Locale; - -public interface ReportExpressionMetaData -{ - - int getParameterCount(); - - String getParameterName(int param); - - String getParameterDisplayName(int param, Locale locale); - - String getParameterDescription(int param, Locale locale); - - String getName(); - - String getDisplayName(Locale l); - - String getDescription(Locale l); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportFunction.java b/reportbuilder/java/com/sun/star/report/ReportFunction.java deleted file mode 100644 index ee20e0185e58..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportFunction.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * Functions are statefull computation components. - * - * Functions are allowed to have a state, but are considered - * immutable (the same is true for expressions). Functions are - * allowed to update their state on every call to 'advance', which - * signals, that the cursor has been moved. - * - * Functions have no way to 'reset' their state, if a reset is needed, - * the report engine is urged to query a new instance from the ReportAddin. - */ -public interface ReportFunction extends ReportExpression -{ - - public ReportFunction advance(DataRow row); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportJob.java b/reportbuilder/java/com/sun/star/report/ReportJob.java deleted file mode 100644 index 16dbc32c90a6..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportJob.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import java.io.IOException; - -/** - * This allows some simple job control. A job can be interrupted (or if it has - * not yet been started, canceled), and the job status can be queried (scheduled, - * running, finished). - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
JobStatusrunningfinished
Scheduledfalsefalse
Runningtruefalse
Finishedfalsetrue
- * - */ -public interface ReportJob -{ - - /** - * Although we might want to run the job as soon as it has been - * created, sometimes it is wiser to let the user add some listeners - * first. If we execute at once, the user either has to deal with - * threading code or wont receive any progress information in single - * threaded environments. - * @throws java.io.IOException - * @throws ReportExecutionException - */ - void execute() - throws ReportExecutionException, IOException; - - /** - * Interrupt the job. - */ - void interrupt(); - - /** - * Queries the jobs execution status. - * - * @return true, if the job is currently running, false otherwise. - */ - boolean isRunning(); - - /** - * Queries the jobs result status. - * - * @return true, if the job is finished (or has been interrupted), false - * if the job waits for activation. - */ - boolean isFinished(); - - void addProgressIndicator(JobProgressIndicator indicator); - - void removeProgressIndicator(JobProgressIndicator indicator); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportJobDefinition.java b/reportbuilder/java/com/sun/star/report/ReportJobDefinition.java deleted file mode 100644 index 8ba30f2da465..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportJobDefinition.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -/** - * The report job is created by the report job factory and holds all properties - * required to complete the reporting task. - * - */ -public interface ReportJobDefinition -{ - - /** - * The parameters of the root report definition. The report parameters are using - * by the query factory to parametrize the query statement. - * - * The query parameters for the subreports are defined using mappings, it would not - * make sense to define them here. - * - * @return a map containing the report parameters - */ - ParameterMap getQueryParameters(); - - /** - * The report processing parameters control the behaviour of the report. There are - * several mandatory parameters, some optional and possibly some not-yet-understood - * parameters. Use the engine meta data to find out, which parameters are supported. - * - * @return the processing parameters - */ - JobProperties getProcessingParameters(); -} diff --git a/reportbuilder/java/com/sun/star/report/ReportJobFactory.java b/reportbuilder/java/com/sun/star/report/ReportJobFactory.java deleted file mode 100644 index 4345e009c5b2..000000000000 --- a/reportbuilder/java/com/sun/star/report/ReportJobFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.beans.NamedValue; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.uno.Exception; - -public interface ReportJobFactory -{ - - ReportJob createReportJob(final NamedValue[] namedValue) throws IllegalArgumentException, ReportExecutionException, Exception; -} diff --git a/reportbuilder/java/com/sun/star/report/SDBCReportData.java b/reportbuilder/java/com/sun/star/report/SDBCReportData.java deleted file mode 100644 index 7f8fae13a16f..000000000000 --- a/reportbuilder/java/com/sun/star/report/SDBCReportData.java +++ /dev/null @@ -1,367 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XIndexAccess; -import com.sun.star.container.XNameAccess; -import com.sun.star.lang.IndexOutOfBoundsException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.sdb.XParametersSupplier; -import com.sun.star.sdbc.DataType; -import com.sun.star.sdbc.SQLException; -import com.sun.star.sdbc.XResultSetMetaData; -import com.sun.star.sdbc.XResultSetMetaDataSupplier; -import com.sun.star.sdbc.XRow; -import com.sun.star.sdbc.XRowSet; -import com.sun.star.sdbcx.XColumnsSupplier; -import com.sun.star.uno.Any; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.util.DateTime; -import com.sun.star.util.Time; - -import java.sql.Timestamp; - -public class SDBCReportData implements DataSource -{ - - private final XRowSet rowSet; - private final XRow row; - private int rowCount; - private XIndexAccess parameters; - private int firstParameterIndex = -1; - private int columnCount; - private final String[] columnNames; - private final int[] columnTypes; - - public SDBCReportData(final XRowSet rowSet) throws SQLException - { - row = (XRow) UnoRuntime.queryInterface(XRow.class, rowSet); - this.rowSet = rowSet; - - if (rowSet == null) - { - rowCount = 0; - columnCount = 0; - columnTypes = new int[1]; - columnNames = new String[1]; - } - else - { - final XParametersSupplier xSuppParams = (XParametersSupplier) UnoRuntime.queryInterface( - XParametersSupplier.class, rowSet); - if (xSuppParams != null) - { - parameters = xSuppParams.getParameters(); - } - - final XColumnsSupplier columnsSup = (XColumnsSupplier) UnoRuntime.queryInterface(XColumnsSupplier.class, rowSet); - final XNameAccess columns = columnsSup.getColumns(); - final String[] columnNamesList = columns.getElementNames(); - final XResultSetMetaDataSupplier sup = (XResultSetMetaDataSupplier) UnoRuntime.queryInterface(XResultSetMetaDataSupplier.class, rowSet); - final XResultSetMetaData resultSetMetaData = sup.getMetaData(); - - columnCount = resultSetMetaData.getColumnCount(); - firstParameterIndex = columnCount + 1; - if (parameters != null) - { - columnCount += parameters.getCount(); - } - - columnTypes = new int[columnCount]; - columnNames = new String[columnCount]; - - for (int i = 1; i <= columnCount; ++i) - { - if (i < firstParameterIndex) - { - columnNames[i - 1] = columnNamesList[i - 1];// resultSetMetaData.getColumnName(i); - columnTypes[i - 1] = resultSetMetaData.getColumnType(i); - } - else - { - try - { - final XPropertySet paramColumn = (XPropertySet) UnoRuntime.queryInterface( - XPropertySet.class, parameters.getByIndex(i - firstParameterIndex)); - columnNames[i - 1] = (String) paramColumn.getPropertyValue("Name"); - columnTypes[i - 1] = (Integer) paramColumn.getPropertyValue("Type"); - } - catch (Exception e) - { - columnNames[i - 1] = "Error"; - columnTypes[i - 1] = DataType.CHAR; - } - } - } - - if (rowSet.last()) - { - rowCount = rowSet.getRow(); - rowSet.beforeFirst(); - } - else - { - rowCount = 0; - } - } - } - - public int getColumnCount() throws DataSourceException - { - return columnCount; - } - - public int getRowCount() - { - return rowCount; - } - - public String getColumnName(final int column) throws DataSourceException - { - return columnNames[column - 1]; - } - - public boolean absolute(final int row) throws DataSourceException - { - if (rowSet == null) - { - return false; - } - try - { - if (row == 0) - { - rowSet.beforeFirst(); - return true; - } - return rowSet.absolute(row); - } - catch (SQLException e) - { - throw new DataSourceException(e.getMessage(), e); - } - } - - public boolean next() throws DataSourceException - { - if (rowSet == null) - { - return false; - } - try - { - return rowSet.next(); - } - catch (SQLException e) - { - throw new DataSourceException(e.getMessage(), e); - } - } - - public void close() throws DataSourceException - { - } - - static private java.sql.Date getDate(final Object obj) - { - final java.sql.Date date; - if (obj instanceof com.sun.star.util.Date) - { - final com.sun.star.util.Date unodate = (com.sun.star.util.Date) obj; - date = java.sql.Date.valueOf(getDateString(unodate.Year, unodate.Month, unodate.Day).toString()); - } - else - { - date = null; - } - return date; - } - - private static StringBuffer getTimeString(final int hours, final int minutes, final int seconds) - { - final StringBuffer timeString = new StringBuffer(); - if (hours < 10) - { - timeString.append('0'); - } - timeString.append(hours); - timeString.append(':'); - if (minutes < 10) - { - timeString.append('0'); - } - timeString.append(minutes); - timeString.append(':'); - if (seconds < 10) - { - timeString.append('0'); - } - timeString.append(seconds); - return timeString; - } - - static private StringBuffer getDateString(final int years, final int months, final int days) - { - final StringBuffer str = new StringBuffer(); - str.append(years); - final StringBuffer str2 = new StringBuffer("0000"); - str2.delete(0, str.length()); - str.insert(0, str2); - str.append('-'); - if (months < 10) - { - str.append('0'); - } - str.append(months); - str.append('-'); - if (days < 10) - { - str.append('0'); - } - str.append(days); - return str; - } - - static private java.sql.Time getTime(final Object obj) - { - final java.sql.Time time; - if (obj instanceof Time) - { - final Time unoTime = (Time) obj; - time = java.sql.Time.valueOf(getTimeString(unoTime.Hours, unoTime.Minutes, unoTime.Seconds).toString()); - } - else - { - time = null; - } - return time; - } - - static private Timestamp getTimestamp(final Object obj) - { - final Timestamp ts; - if (obj instanceof DateTime) - { - final DateTime unoTs = (DateTime) obj; - final StringBuffer str = getDateString(unoTs.Year, unoTs.Month, unoTs.Day); - str.append(' '); - str.append(getTimeString(unoTs.Hours, unoTs.Minutes, unoTs.Seconds)); - str.append('.'); - str.append(unoTs.HundredthSeconds); - ts = java.sql.Timestamp.valueOf(str.toString()); - } - else - { - ts = null; - } - return ts; - } - - public Object getObject(final int column) throws DataSourceException - { - if (rowSet == null) - { - return null; - } - try - { - final boolean isParameterValue = (parameters != null) && (column >= firstParameterIndex); - Object obj; - final boolean wasNull; - if (isParameterValue) - { - final XPropertySet paramCol = (XPropertySet) UnoRuntime.queryInterface( - XPropertySet.class, parameters.getByIndex(column - firstParameterIndex)); - obj = paramCol.getPropertyValue("Value"); - wasNull = obj == null; - } - else - { - obj = row.getObject(column, null); - wasNull = row.wasNull(); - } - - if (wasNull) - { - obj = null; - } - else - { - obj = convertObject(columnTypes[column - 1], obj); - } - return obj; - } - catch (SQLException ex) - { - throw new DataSourceException(ex.getMessage(), ex); - } - catch (UnknownPropertyException ex) - { - throw new DataSourceException(ex.getMessage(), ex); - } - catch (IndexOutOfBoundsException ex) - { - throw new DataSourceException(ex.getMessage(), ex); - } - catch (WrappedTargetException ex) - { - throw new DataSourceException(ex.getMessage(), ex); - } - } - - private Object convertObject(final int type, final Object obj) - { - Object ret; - switch (type) - { - case DataType.DATE: - ret = getDate(obj); - break; - case DataType.TIME: - ret = getTime(obj); - break; - case DataType.TIMESTAMP: - ret = getTimestamp(obj); - break; - case DataType.DECIMAL: - case DataType.NUMERIC: - if (!(obj instanceof Any)) - { - try - { - ret = new java.math.BigDecimal(String.valueOf(obj)); - } - catch (NumberFormatException ex) - { - ret = obj; - } - } - else - { - ret = obj; - } - break; - default: - ret = obj; - break; - } - return ret; - } -} diff --git a/reportbuilder/java/com/sun/star/report/SDBCReportDataFactory.java b/reportbuilder/java/com/sun/star/report/SDBCReportDataFactory.java deleted file mode 100644 index d0168a645db1..000000000000 --- a/reportbuilder/java/com/sun/star/report/SDBCReportDataFactory.java +++ /dev/null @@ -1,581 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.NoSuchElementException; -import com.sun.star.container.XIndexAccess; -import com.sun.star.container.XNameAccess; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.lang.IndexOutOfBoundsException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.XComponent; -import com.sun.star.sdb.CommandType; -import com.sun.star.sdb.XCompletedExecution; -import com.sun.star.sdb.XParametersSupplier; -import com.sun.star.sdb.XQueriesSupplier; -import com.sun.star.sdb.XSingleSelectQueryComposer; -import com.sun.star.sdb.tools.XConnectionTools; -import com.sun.star.sdbc.SQLException; -import com.sun.star.sdbc.XConnection; -import com.sun.star.sdbc.XParameters; -import com.sun.star.sdbc.XRowSet; -import com.sun.star.task.XInteractionHandler; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.lang.reflect.Method; - -import java.math.BigDecimal; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - - -/** - * Very primitive implementation, just to show how this could be used ... - * - */ -public class SDBCReportDataFactory implements DataSourceFactory -{ - - private static final String ESCAPEPROCESSING = "EscapeProcessing"; - - private class RowSetProperties - { - - final Boolean escapeProcessing; - final int commandType; - final Integer maxRows; - final String command; - final String filter; - - public RowSetProperties(final Boolean escapeProcessing, final int commandType, final String command, final String filter, final Integer maxRows) - { - this.escapeProcessing = escapeProcessing; - this.commandType = commandType; - this.command = command; - this.filter = filter; - this.maxRows = maxRows; - } - - public boolean equals(Object obj) - { - if (obj == null) - { - return false; - } - if (getClass() != obj.getClass()) - { - return false; - } - final RowSetProperties other = (RowSetProperties) obj; - if (this.escapeProcessing != other.escapeProcessing && (this.escapeProcessing == null || !this.escapeProcessing.equals(other.escapeProcessing))) - { - return false; - } - if (this.commandType != other.commandType) - { - return false; - } - if (this.maxRows != other.maxRows && (this.maxRows == null || !this.maxRows.equals(other.maxRows))) - { - return false; - } - if ((this.command == null) ? (other.command != null) : !this.command.equals(other.command)) - { - return false; - } - if ((this.filter == null) ? (other.filter != null) : !this.filter.equals(other.filter)) - { - return false; - } - return true; - } - - public int hashCode() - { - int hash = 3; - hash = 59 * hash + (this.escapeProcessing != null ? this.escapeProcessing.hashCode() : 0); - hash = 59 * hash + this.commandType; - hash = 59 * hash + (this.maxRows != null ? this.maxRows.hashCode() : 0); - hash = 59 * hash + (this.command != null ? this.command.hashCode() : 0); - hash = 59 * hash + (this.filter != null ? this.filter.hashCode() : 0); - return hash; - } - } - - class ParameterDefinition - { - int parameterCount = 0; - private ArrayList parameterIndex = new ArrayList(); - } - private static final Log LOGGER = LogFactory.getLog(SDBCReportDataFactory.class); - public static final String COMMAND_TYPE = "command-type"; - public static final String ESCAPE_PROCESSING = "escape-processing"; - public static final String GROUP_EXPRESSIONS = "group-expressions"; - public static final String MASTER_VALUES = "master-values"; - public static final String MASTER_COLUMNS = "master-columns"; - 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; - 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 final Map rowSetProperties = new HashMap(); - private final Map parameterMap = new HashMap(); - private boolean rowSetCreated = false; - - public SDBCReportDataFactory(final XComponentContext cmpCtx, final XConnection connection) - { - this.connection = connection; - m_cmpCtx = cmpCtx; - } - - public DataSource queryData(final String command, final Map parameters) throws DataSourceException - { - try - { - if (command == null) - { - return new SDBCReportData(null); - } - int commandType = CommandType.COMMAND; - final String commandTypeValue = (String) parameters.get(COMMAND_TYPE); - if (commandTypeValue != null) - { - if ("query".equals(commandTypeValue)) - { - commandType = CommandType.QUERY; - } - else if ("table".equals(commandTypeValue)) - { - commandType = CommandType.TABLE; - } - else - { - commandType = CommandType.COMMAND; - } - } - final Boolean escapeProcessing = (Boolean) parameters.get(ESCAPE_PROCESSING); - final String filter = (String) parameters.get(UNO_FILTER); - final Integer maxRows = (Integer) parameters.get("MaxRows"); - final RowSetProperties rowSetProps = new RowSetProperties(escapeProcessing, commandType, command, filter, maxRows); - - final Object[] p = createRowSet(rowSetProps, parameters); - final XRowSet rowSet = (XRowSet) p[0]; - - if (command.length() != 0) - { - final ParameterDefinition paramDef = (ParameterDefinition) p[1]; - fillParameter(parameters, rowSet, paramDef); - rowSetCreated = rowSetCreated && (maxRows == null || maxRows == 0); - - final XCompletedExecution execute = (XCompletedExecution) UnoRuntime.queryInterface(XCompletedExecution.class, rowSet); - if (rowSetCreated && execute != null && paramDef.parameterCount > 0) - { - final XInteractionHandler handler = (XInteractionHandler) UnoRuntime.queryInterface(XInteractionHandler.class, m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.sdb.InteractionHandler", m_cmpCtx)); - execute.executeWithCompletion(handler); - } - else - { - rowSet.execute(); - } - } - - rowSetCreated = false; - return new SDBCReportData(rowSet); - } - catch (Exception ex) - { - rowSetCreated = false; - throw new DataSourceException(ex.getMessage(), ex); - } - } - - private String getOrderStatement(final int commandType, final String command, final List groupExpressions) - { - final StringBuffer order = new StringBuffer(); - final int count = groupExpressions.size(); - if (count != 0) - { - try - { - final String quote = connection.getMetaData().getIdentifierQuoteString(); - final XComponent[] hold = new XComponent[1]; - final XNameAccess columns = getFieldsByCommandDescriptor(commandType, command, hold); - if (columns != null) - { - for (int i = 0; i < count; i++) - { - final Object[] pair = (Object[]) groupExpressions.get(i); - String expression = (String) pair[0]; - - if (!expression.startsWith(quote) && columns.hasByName(expression)) - { - XPropertySet column; - try - { - column = UnoRuntime.queryInterface(XPropertySet.class, columns.getByName(expression)); - expression = quote + column.getPropertyValue("TableName") + quote + "." + quote + expression + quote; - } - catch (Exception ex) - { - Logger.getLogger(SDBCReportDataFactory.class.getName()).log(Level.SEVERE, null, ex); - expression = quote + expression + quote; - } - } - expression = expression.trim(); // Trim away white spaces - - if (expression.length() > 0) - { - order.append(expression); - if (order.length() > 0) - { - order.append(' '); - } - final String sorting = (String) pair[1]; - if (sorting == null || sorting.equals(OfficeToken.FALSE)) - { - order.append("DESC"); - } - if ((i + 1) < count) - { - order.append(", "); - } - } - } - } - } - catch (SQLException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } - } - return order.toString(); - } - - private XNameAccess getFieldsByCommandDescriptor(final int commandType, final String command, final XComponent[] out) throws SQLException - { - final Class[] parameter = new Class[3]; - parameter[0] = int.class; - parameter[1] = String.class; - parameter[2] = out.getClass(); - final XConnectionTools tools = (XConnectionTools) UnoRuntime.queryInterface(XConnectionTools.class, connection); - try - { - tools.getClass().getMethod("getFieldsByCommandDescriptor", parameter); - return tools.getFieldsByCommandDescriptor(commandType, command, out); - } - catch (NoSuchMethodException ex) - { - } - - throw new SQLException(); - } - - private XSingleSelectQueryComposer getComposer(final XConnectionTools tools, - final String command, - final int commandType) - { - final Class[] parameter = new Class[2]; - parameter[0] = int.class; - parameter[1] = String.class; - try - { - final Object[] param = new Object[2]; - param[0] = commandType; - param[1] = command; - final Method call = tools.getClass().getMethod("getComposer", parameter); - return (XSingleSelectQueryComposer) call.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 - } - - return null; - } - - private void fillParameter(final Map parameters, - final XRowSet rowSet, final ParameterDefinition paramDef) - throws SQLException, - UnknownPropertyException, - PropertyVetoException, - IllegalArgumentException, - WrappedTargetException - { - final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); - if (masterValues != null && !masterValues.isEmpty()) - { - final XParameters para = (XParameters) UnoRuntime.queryInterface(XParameters.class, rowSet); - - for (int i = 0; - i < masterValues.size(); - i++) - { - Object object = masterValues.get(i); - if (object instanceof BigDecimal) - { - object = ((BigDecimal) object).toString(); - } - final Integer pos = paramDef.parameterIndex.get(i); - para.setObject(pos + 1, object); - } - } - } - - private final Object[] createRowSet(final RowSetProperties rowSetProps, final Map parameters) - throws Exception - { - final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); - if (rowSetProperties.containsKey(rowSetProps) && detailColumns != null && !detailColumns.isEmpty()) - { - return new Object[] - { - rowSetProperties.get(rowSetProps), parameterMap.get(rowSetProps) - }; - } - - rowSetCreated = true; - 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); - - rowSetProp.setPropertyValue("ActiveConnection", connection); - rowSetProp.setPropertyValue(ESCAPEPROCESSING, rowSetProps.escapeProcessing); - rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(rowSetProps.commandType)); - rowSetProp.setPropertyValue(UNO_COMMAND, rowSetProps.command); - - if (rowSetProps.filter != null) - { - rowSetProp.setPropertyValue("Filter", rowSetProps.filter); - rowSetProp.setPropertyValue(APPLY_FILTER, Boolean.valueOf(rowSetProps.filter.length() != 0)); - } - else - { - rowSetProp.setPropertyValue(APPLY_FILTER, Boolean.FALSE); - } - - if (rowSetProps.maxRows != null) - { - rowSetProp.setPropertyValue("MaxRows", rowSetProps.maxRows); - } - - final XConnectionTools tools = (XConnectionTools) UnoRuntime.queryInterface(XConnectionTools.class, connection); - fillOrderStatement(rowSetProps.command, rowSetProps.commandType, parameters, tools, rowSetProp); - final ParameterDefinition paramDef = createParameter(parameters, tools, rowSetProps, rowSet); - - rowSetProperties.put(rowSetProps, rowSet); - parameterMap.put(rowSetProps, paramDef); - - return new Object[] - { - rowSet, paramDef - }; - } - - private ParameterDefinition createParameter(final Map parameters, - final XConnectionTools tools, - RowSetProperties rowSetProps, final XRowSet rowSet) - throws SQLException, - UnknownPropertyException, - PropertyVetoException, - IllegalArgumentException, - WrappedTargetException - { - final ParameterDefinition paramDef = new ParameterDefinition(); - final XSingleSelectQueryComposer composer = getComposer(tools, rowSetProps.command, rowSetProps.commandType); - if (composer != null) - { - final XPropertySet rowSetProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); - if ((Boolean) rowSetProp.getPropertyValue(APPLY_FILTER)) - { - composer.setFilter((String) rowSetProp.getPropertyValue("Filter")); - } - // get old parameter count - final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); - final ArrayList handledColumns = new ArrayList(); - final XParametersSupplier paraSup = (XParametersSupplier) UnoRuntime.queryInterface(XParametersSupplier.class, composer); - if (paraSup != null) - { - final XIndexAccess params = paraSup.getParameters(); - if (params != null) - { - final int oldParameterCount = params.getCount(); - paramDef.parameterCount = oldParameterCount; - if (detailColumns != null) - { - for (int i = 0; i < oldParameterCount; i++) - { - try - { - final XPropertySet parameter = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, params.getByIndex(i)); - if (parameter != null) - { - final String name = (String) parameter.getPropertyValue("Name"); - for (int j = 0; j < detailColumns.size(); j++) - { - if (name.equals(detailColumns.get(j))) - { - handledColumns.add(name); - paramDef.parameterIndex.add(i); - --paramDef.parameterCount; - break; - } - } - } - } - catch (IndexOutOfBoundsException ex) - { - Logger.getLogger(SDBCReportDataFactory.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - } - } - final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); - if (masterValues != null && !masterValues.isEmpty() && paramDef.parameterIndex.size() != detailColumns.size()) - { - // Vector masterColumns = (Vector) parameters.get("master-columns"); - - // create the new filter - final String quote = connection.getMetaData().getIdentifierQuoteString(); - final StringBuffer oldFilter = new StringBuffer(); - oldFilter.append(composer.getFilter()); - if (oldFilter.length() != 0) - { - oldFilter.append(" AND "); - } - int newParamterCounter = 1; - for (final Iterator it = detailColumns.iterator(); it.hasNext(); - ++newParamterCounter) - { - final String detail = (String) it.next(); - if (!handledColumns.contains(detail)) - { - //String master = (String) masterIt.next(); - oldFilter.append(quote); - oldFilter.append(detail); - oldFilter.append(quote); - oldFilter.append(" = :link_"); - oldFilter.append(newParamterCounter); - if (it.hasNext()) - { - oldFilter.append(" AND "); - } - paramDef.parameterIndex.add(newParamterCounter + paramDef.parameterCount - 1); - } - } - - composer.setFilter(oldFilter.toString()); - - final String sQuery = composer.getQuery(); - rowSetProp.setPropertyValue(UNO_COMMAND, sQuery); - rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(CommandType.COMMAND)); - } - } - return paramDef; - } - - void fillOrderStatement(final String command, - final int commandType, final Map parameters, - final XConnectionTools tools, - final XPropertySet rowSetProp) - throws SQLException, - UnknownPropertyException, - PropertyVetoException, - IllegalArgumentException, - 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 = getComposer(tools, command, commandType); - 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(""); - 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 Boolean escape = (Boolean) prop.getPropertyValue(ESCAPEPROCESSING); - rowSetProp.setPropertyValue(ESCAPEPROCESSING, escape); - final String queryCommand = (String) prop.getPropertyValue(UNO_COMMAND); - statement = "SELECT * FROM (" + queryCommand + ") AS \"__LibreOffice_report_result\""; - } - - } - else - { - statement = "SELECT * FROM (" + command + ") AS \"__LibreOffice_report_result\""; - } - } - rowSetProp.setPropertyValue(UNO_COMMAND, statement); - rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(CommandType.COMMAND)); - } - rowSetProp.setPropertyValue("Order", order.toString()); - } -} - diff --git a/reportbuilder/java/com/sun/star/report/SOImageService.java b/reportbuilder/java/com/sun/star/report/SOImageService.java deleted file mode 100644 index 41522324d63f..000000000000 --- a/reportbuilder/java/com/sun/star/report/SOImageService.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.awt.Size; -import com.sun.star.beans.PropertyValue; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.XPropertySetInfo; -import com.sun.star.graphic.XGraphicProvider; -import com.sun.star.io.IOException; -import com.sun.star.io.XInputStream; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lib.uno.adapter.ByteArrayToXInputStreamAdapter; -import com.sun.star.lib.uno.adapter.InputStreamToXInputStreamAdapter; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.io.InputStream; - - -public class SOImageService implements ImageService -{ - - private final XGraphicProvider m_xGraphicProvider; - - /** - * Creates a new instance of SOImageService - * @param xCompContext - * @throws ReportExecutionException - */ - public SOImageService(final XComponentContext xCompContext) - throws ReportExecutionException, com.sun.star.uno.Exception - { - if (xCompContext == null) - { - throw new ReportExecutionException(); - } - - - final XMultiComponentFactory m_xMCF = xCompContext.getServiceManager(); - m_xGraphicProvider = (XGraphicProvider) UnoRuntime.queryInterface(XGraphicProvider.class, - m_xMCF.createInstanceWithContext("com.sun.star.graphic.GraphicProvider", xCompContext)); - - if (m_xGraphicProvider == null) - { - throw new ReportExecutionException("There is no graphic-provider available."); - } - } - - public Size getImageSize(final InputStream image) throws ReportExecutionException - { - return getImageSize(new InputStreamToXInputStreamAdapter(image)); - } - - private Size getImageSize(final XInputStream image) throws ReportExecutionException - { - final Size dim = new Size(); - try - { - final PropertyValue[] value = new PropertyValue[] - { - new PropertyValue() - }; - value[0].Name = "InputStream"; - value[0].Value = image; - - final XPropertySet xImage = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, - m_xGraphicProvider.queryGraphic(value)); - - if (xImage != null) - { - final XPropertySetInfo xInfo = xImage.getPropertySetInfo(); - if (xInfo.hasPropertyByName("Size100thMM")) - { - Size imageSize = (Size) xImage.getPropertyValue("Size100thMM"); - dim.Width = imageSize.Width; - dim.Height = imageSize.Height; - if (dim.Height == 0 && dim.Width == 0) - { - imageSize = (Size) xImage.getPropertyValue("SizePixel"); - final int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); - final double fac = 2540 / (double) dpi; - dim.Width = (int) (imageSize.Width * fac); - dim.Height = (int) (imageSize.Height * fac); - } - } - else if (xInfo.hasPropertyByName("SizePixel")) - { - final Size imageSize = (Size) xImage.getPropertyValue("SizePixel"); - final int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); - final double fac = 2540 / dpi; - dim.Width = (int) (imageSize.Width * fac); - dim.Height = (int) (imageSize.Height * fac); - } - } - } - catch (Exception ex) - { - throw new ReportExecutionException("Failed to query Image-Size", ex); - } - return dim; - } - - public Size getImageSize(final byte[] image) throws ReportExecutionException - { - return getImageSize(new ByteArrayToXInputStreamAdapter(image)); - } - - private String getMimeType(final XInputStream image) throws ReportExecutionException - { - try - { - final PropertyValue[] value = new PropertyValue[] - { - new PropertyValue() - }; - value[0].Name = "InputStream"; - value[0].Value = image; - - final XPropertySet xImage = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, - m_xGraphicProvider.queryGraphic(value)); - - if (xImage != null) - { - final XPropertySetInfo xInfo = xImage.getPropertySetInfo(); - if (xInfo.hasPropertyByName("MimeType")) - { - return (String) xImage.getPropertyValue("MimeType"); - } - } - } - catch (UnknownPropertyException ex) - { - throw new ReportExecutionException(); - } - catch (WrappedTargetException ex) - { - throw new ReportExecutionException(); - } - catch (com.sun.star.lang.IllegalArgumentException ex) - { - throw new ReportExecutionException(); - } - catch (IOException ex) - { - throw new ReportExecutionException(); - } - return null; - } - - public String getMimeType(final InputStream image) throws ReportExecutionException - { - return getMimeType(new InputStreamToXInputStreamAdapter(image)); - } - - public String getMimeType(final byte[] image) throws ReportExecutionException - { - return getMimeType(new ByteArrayToXInputStreamAdapter(image)); - } -} diff --git a/reportbuilder/java/com/sun/star/report/StorageRepository.java b/reportbuilder/java/com/sun/star/report/StorageRepository.java deleted file mode 100644 index 0b23997bfcb9..000000000000 --- a/reportbuilder/java/com/sun/star/report/StorageRepository.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report; - -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.NoSuchElementException; -import com.sun.star.embed.ElementModes; -import com.sun.star.embed.InvalidStorageException; -import com.sun.star.embed.XStorage; -import com.sun.star.embed.XTransactedObject; -import com.sun.star.io.XStream; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter; -import com.sun.star.lib.uno.adapter.XOutputStreamToOutputStreamAdapter; -import com.sun.star.uno.UnoRuntime; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * A directory holds all the contents here. - * - * - */ -public class StorageRepository implements InputRepository, OutputRepository -{ - - private static final Log LOGGER = LogFactory.getLog(SDBCReportDataFactory.class); - private static final String REPORT_PROCESSING_FAILED = "ReportProcessing failed"; - private XStorage input; - private XStorage output; - private final String rootURL; - - /** - * - * @param input - * @param output - * @param rootURL - * @throws java.io.IOException - */ - public StorageRepository(final XStorage input, final XStorage output, final String rootURL) - { - this.input = input; - this.output = output; - this.rootURL = rootURL; - - } - - public StorageRepository(final XStorage storage, final boolean isOutput, final String rootURL) - { - this.rootURL = rootURL; - if (isOutput) - { - this.output = storage; - } - else - { - this.input = storage; - } - } - - public InputStream createInputStream(final String name) throws IOException - { - if (input == null) - { - throw new IOException("input is NULL"); - } - try - { - final XStream xStream = (XStream) UnoRuntime.queryInterface(XStream.class, input.openStreamElement(name, ElementModes.READ)); - return new BufferedInputStream(new XInputStreamToInputStreamAdapter(xStream.getInputStream()), 102400); - } - catch (com.sun.star.uno.Exception e) - { - throw new IOException("createInputStream"); - } - } - - /** - * Creates an output stream for writing the data. If there is an entry with - * that name already contained in the repository, try to overwrite it. - * - * @param name - * @param mimeType - * @return the outputstream - * @throws IOException if opening the stream fails - */ - public OutputStream createOutputStream(final String name, final String mimeType) throws IOException - { - if (output == null) - { - throw new IOException("output is NULL"); - } - try - { - final XStream stream = output.openStreamElement(name, ElementModes.WRITE | ElementModes.TRUNCATE); - stream.getInputStream().closeInput(); - if (mimeType != null) - { - final XPropertySet prop = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, stream); - prop.setPropertyValue("MediaType", mimeType); - } - return new BufferedOutputStream(new XOutputStreamToOutputStreamAdapter(stream.getOutputStream()), 204800); - } - catch (com.sun.star.uno.Exception e) - { - throw new IOException("createOutputStream"); - } - } - - public boolean exists(final String name) - { - try - { - return output.isStreamElement(name); - } - catch (InvalidStorageException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (com.sun.star.lang.IllegalArgumentException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (NoSuchElementException e) - { - // We expect this exception, no need to log it. - } - return false; - } - - public boolean isWritable(final String name) - { - return true; - } - - public Object getId() - { - return "1"; - } - - public long getVersion(final String name) - { - return 1; - } - - public boolean isReadable(final String name) - { - try - { - if (input != null) - { - return input.isStreamElement(name); - } - } - catch (InvalidStorageException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (com.sun.star.lang.IllegalArgumentException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (NoSuchElementException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - return false; - } - - public InputRepository openInputRepository(final String name) throws IOException - { - try - { - final String temp = shortenName(name); - if (!input.isStorageElement(temp)) - { - throw new IOException(); - } - final XStorage storage = (XStorage) UnoRuntime.queryInterface(XStorage.class, input.openStorageElement(temp, ElementModes.READ)); - return new StorageRepository(storage, false, rootURL); - } - catch (NoSuchElementException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (WrappedTargetException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (InvalidStorageException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (IllegalArgumentException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (com.sun.star.io.IOException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - throw new IOException(); - } - - final String shortenName(final String name) - { - final String temp; - if (name.startsWith("./")) - { - temp = name.substring(2); - } - else - { - temp = name; - } - return temp; - } - - public OutputRepository openOutputRepository(final String name, final String mimeType) throws IOException - { - try - { - final String temp = shortenName(name); - final XStorage storage = (XStorage) UnoRuntime.queryInterface(XStorage.class, output.openStorageElement(temp, ElementModes.WRITE)); - if (mimeType != null) - { - final XPropertySet prop = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, storage); - prop.setPropertyValue("MediaType", mimeType); - } - return new StorageRepository(storage, true, rootURL); - } - catch (UnknownPropertyException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (PropertyVetoException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (IllegalArgumentException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (WrappedTargetException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (InvalidStorageException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (com.sun.star.io.IOException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - - throw new IOException(); - } - - public void closeInputRepository() - { - if (input != null) - { - input.dispose(); - } - } - - public void closeOutputRepository() - { - if (output != null) - { - try - { - final XTransactedObject obj = (XTransactedObject) UnoRuntime.queryInterface(XTransactedObject.class, output); - if (obj != null) - { - obj.commit(); - } - } - catch (com.sun.star.io.IOException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (WrappedTargetException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - output.dispose(); - } - - } - - public boolean existsStorage(final String name) - { - try - { - return output.isStorageElement(name); - } - catch (InvalidStorageException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (com.sun.star.lang.IllegalArgumentException ex) - { - LOGGER.error(REPORT_PROCESSING_FAILED, ex); - } - catch (NoSuchElementException ex) - { - // We expect this exception, no need to log it. - } - return false; - } - - public String getRootURL() - { - return rootURL; - } -} diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties deleted file mode 100644 index a05ce8dad886..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=AUTHOR -description=Returns the author of the report. diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties deleted file mode 100644 index a05ce8dad886..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=AUTHOR -description=Returns the author of the report. diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction.java b/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction.java deleted file mode 100644 index 641eddf0c840..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.function.metadata; - -import com.sun.star.report.ReportEngineParameterNames; - -import org.pentaho.reporting.libraries.formula.EvaluationException; -import org.pentaho.reporting.libraries.formula.FormulaContext; -import org.pentaho.reporting.libraries.formula.LibFormulaErrorValue; -import org.pentaho.reporting.libraries.formula.function.Function; -import org.pentaho.reporting.libraries.formula.function.ParameterCallback; -import org.pentaho.reporting.libraries.formula.lvalues.TypeValuePair; -import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; - -public class AuthorFunction implements Function -{ - - public String getCanonicalName() - { - return "AUTHOR"; - } - - public TypeValuePair evaluate(final FormulaContext context, final ParameterCallback parameters) - throws EvaluationException - { - if (parameters.getParameterCount() != 0) - { - throw new EvaluationException(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE); - } - - return new TypeValuePair(TextType.TYPE, context.getConfiguration().getConfigProperty(ReportEngineParameterNames.AUTHOR)); - } -} diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription.java b/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription.java deleted file mode 100644 index af4cd6c96fc0..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.function.metadata; - -import org.pentaho.reporting.libraries.formula.function.AbstractFunctionDescription; -import org.pentaho.reporting.libraries.formula.function.FunctionCategory; -import org.pentaho.reporting.libraries.formula.typing.Type; -import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; - -public class AuthorFunctionDescription extends AbstractFunctionDescription -{ - - public AuthorFunctionDescription() - { - super("AUTHOR", "com.sun.star.report.function.metadata.Author-Function"); - } - - public FunctionCategory getCategory() - { - return MetaDataFunctionCategory.CATEGORY; - } - - public int getParameterCount() - { - return 0; - } - - public Type getParameterType(final int position) - { - return null; - } - - public Type getValueType() - { - return TextType.TYPE; - } - - public boolean isParameterMandatory(final int position) - { - return false; - } -} diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory.java b/reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory.java deleted file mode 100644 index 42b6b770e26d..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.function.metadata; - -import org.pentaho.reporting.libraries.formula.function.AbstractFunctionCategory; -import org.pentaho.reporting.libraries.formula.function.FunctionCategory; - -public class MetaDataFunctionCategory extends AbstractFunctionCategory -{ - - public static final FunctionCategory CATEGORY = new MetaDataFunctionCategory(); - - private MetaDataFunctionCategory() - { - super("com.sun.star.report.function.metadata.category"); - } -} - diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties deleted file mode 100644 index 3c0039f6c105..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=TITLE -description=Returns the title of the report. diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties deleted file mode 100644 index 3c0039f6c105..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=TITLE -description=Returns the title of the report. diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction.java b/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction.java deleted file mode 100644 index a6572b44ace2..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.function.metadata; - -import com.sun.star.report.ReportEngineParameterNames; - -import org.pentaho.reporting.libraries.formula.EvaluationException; -import org.pentaho.reporting.libraries.formula.FormulaContext; -import org.pentaho.reporting.libraries.formula.LibFormulaErrorValue; -import org.pentaho.reporting.libraries.formula.function.Function; -import org.pentaho.reporting.libraries.formula.function.ParameterCallback; -import org.pentaho.reporting.libraries.formula.lvalues.TypeValuePair; -import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; - -public class TitleFunction implements Function -{ - - public TitleFunction() - { - } - - public String getCanonicalName() - { - return "TITLE"; - } - - public TypeValuePair evaluate(final FormulaContext context, final ParameterCallback parameters) - throws EvaluationException - { - if (parameters.getParameterCount() != 0) - { - throw new EvaluationException(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE); - } - - return new TypeValuePair(TextType.TYPE, context.getConfiguration().getConfigProperty(ReportEngineParameterNames.TITLE)); - } -} diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription.java b/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription.java deleted file mode 100644 index 0c0c80acf284..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.function.metadata; - -import org.pentaho.reporting.libraries.formula.function.AbstractFunctionDescription; -import org.pentaho.reporting.libraries.formula.function.FunctionCategory; -import org.pentaho.reporting.libraries.formula.typing.Type; -import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; - -public class TitleFunctionDescription extends AbstractFunctionDescription -{ - - public TitleFunctionDescription() - { - super("TITLE", "com.sun.star.report.function.metadata.Title-Function"); - } - - public FunctionCategory getCategory() - { - return MetaDataFunctionCategory.CATEGORY; - } - - public int getParameterCount() - { - return 0; - } - - public Type getParameterType(final int position) - { - return null; - } - - public Type getValueType() - { - return TextType.TYPE; - } - - public boolean isParameterMandatory(final int position) - { - return false; - } -} diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/category.properties b/reportbuilder/java/com/sun/star/report/function/metadata/category.properties deleted file mode 100644 index 39f24f271d1e..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/category.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=Document Information -description=Contains functions to access document information. diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties deleted file mode 100644 index 76ea0bb4d77f..000000000000 --- a/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -display-name=MetaData -description=Contains functions about meta data diff --git a/reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator.java b/reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator.java deleted file mode 100644 index f8397a7d31b4..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.OutputRepository; - -import java.io.IOException; - - -public class DefaultNameGenerator -{ - - private final OutputRepository outputRepository; - - public DefaultNameGenerator(final OutputRepository outputRepository) - { - if (outputRepository == null) - { - throw new NullPointerException(); - } - this.outputRepository = outputRepository; - } - - public String generateName(final String namePrefix, final String mimeType) - throws IOException - { - return generateName(namePrefix, mimeType, true); - } - - public String generateStorageName(final String namePrefix, final String mimeType) - throws IOException - { - return generateName(namePrefix, mimeType, false); - } - - /** - * Generates a new, unique name for storing resources in the output repository. Assuming that proper synchronization - * has been applied, the generated name will be unique within that repository. - * - * @param namePrefix a user defined name for that resource. - * @param mimeType the mime type of the resource to be stored in the repository. - * @param isStream - * @return the generated, fully qualified name. - * @throws java.io.IOException - */ - private String generateName(final String namePrefix, final String mimeType, final boolean isStream) - throws IOException - { - final String name; - if (namePrefix != null) - { - name = namePrefix; - } - else - { - name = "file"; - } - - StringBuffer firstFileName = new StringBuffer(); - firstFileName.append(name); - final String suffix; - if (mimeType != null) - { - suffix = getSuffixForType(mimeType); - firstFileName.append('.'); - firstFileName.append(suffix); - } - else - { - suffix = null; - } - String newName = firstFileName.toString(); - boolean exists; - if (isStream) - { - exists = outputRepository.exists(newName); - } - else - { - exists = outputRepository.existsStorage(newName); - } - if (exists) - { - int counter = 0; - while (exists) - { - if (counter < 0) // wraparound should not happen.. - { - throw new IOException(); - } - firstFileName.delete(0, firstFileName.length()); - firstFileName.append(name); - firstFileName.append(counter); - if (suffix != null) - { - firstFileName.append('.'); - firstFileName.append(suffix); - } - newName = firstFileName.toString(); - if (isStream) - { - exists = outputRepository.exists(newName); - } - else - { - exists = outputRepository.existsStorage(newName); - } - counter++; - } - } - return newName; - } - - protected String getSuffixForType(final String mimeType) - { - if ("image/png".equals(mimeType)) - { - return "png"; - } - if ("image/jpeg".equals(mimeType)) - { - return "jpg"; - } - if ("image/gif".equals(mimeType)) - { - return "gif"; - } - - // todo ... use a flexible mapping ... - return "dat"; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/Manifest.mf b/reportbuilder/java/com/sun/star/report/pentaho/Manifest.mf deleted file mode 100644 index 5d27005f2d65..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/Manifest.mf +++ /dev/null @@ -1,7 +0,0 @@ -RegistrationClassName: com.sun.star.report.pentaho.SOReportJobFactory -Class-Path: reportbuilderwizard.jar - flute-1.1.6.jar libserializer-1.1.6.jar libbase-1.1.6.jar - libfonts-1.1.6.jar libformula-1.1.7.jar liblayout-0.2.10.jar - libloader-1.1.6.jar librepository-1.1.6.jar libxml-1.1.7.jar - flow-engine-0.9.4.jar sac.jar commons-logging-1.1.1.jar -UNO-Type-Path: diff --git a/reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces.java b/reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces.java deleted file mode 100644 index c9efb511cf12..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -/** - * Creation-Date: Feb 22, 2007, 1:53:29 PM - * - */ -public class OfficeNamespaces -{ - - public static final String OFFICE_NS = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; - public static final String TABLE_NS = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; - public static final String TEXT_NS = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; - public static final String STYLE_NS = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"; - public static final String DRAWING_NS = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; - public static final String FO_NS = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"; - public static final String XLINK_NS = "http://www.w3.org/1999/xlink"; - public static final String PURL_NS = "http://purl.org/dc/elements/1.1/"; - public static final String META_NS = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"; - public static final String DATASTYLE_NS = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"; - public static final String SVG_NS = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; - public static final String CHART_NS = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"; - public static final String CHARTOOO_NS = "http://openoffice.org/2010/chart"; - public static final String DR3D_NS = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"; - public static final String MATHML_NS = "http://www.w3.org/1998/Math/MathML"; - public static final String FORM_NS = "urn:oasis:names:tc:opendocument:xmlns:form:1.0"; - public static final String SCRIPT_NS = "urn:oasis:names:tc:opendocument:xmlns:script:1.0"; - public static final String OO2004_NS = "http://openoffice.org/2004/office"; - public static final String OOW2004_NS = "http://openoffice.org/2004/writer"; - public static final String OOC2004_NS = "http://openoffice.org/2004/calc"; - public static final String XML_EVENT_NS = "http://www.w3.org/2001/xml-events"; - public static final String XFORMS_NS = "http://www.w3.org/2002/xforms"; - public static final String XSD_NS = "http://www.w3.org/2001/XMLSchema"; - public static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance"; - public static final String OOREPORT_NS = "http://openoffice.org/2005/report"; - public static final String GRDDL_NS = "http://www.w3.org/2003/g/data-view#"; - public static final String CONFIG = "urn:oasis:names:tc:opendocument:xmlns:config:1.0"; - /** - * @deprecated - */ - public static final String NUMBER_NS = DATASTYLE_NS; - - private OfficeNamespaces() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext.java b/reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext.java deleted file mode 100644 index 8544004ca168..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import org.pentaho.reporting.libraries.base.config.Configuration; -import org.pentaho.reporting.libraries.formula.ContextEvaluationException; -import org.pentaho.reporting.libraries.formula.FormulaContext; -import org.pentaho.reporting.libraries.formula.LocalizationContext; -import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; -import org.pentaho.reporting.libraries.formula.operators.OperatorFactory; -import org.pentaho.reporting.libraries.formula.typing.Type; -import org.pentaho.reporting.libraries.formula.typing.TypeRegistry; - -public class PentahoFormulaContext implements FormulaContext -{ - - final private FormulaContext backend; - final private Configuration config; - - public PentahoFormulaContext(final FormulaContext backend, final Configuration _config) - { - this.backend = backend; - config = _config; - } - - public LocalizationContext getLocalizationContext() - { - return backend.getLocalizationContext(); - } - - public Configuration getConfiguration() - { - return config; - } - - public FunctionRegistry getFunctionRegistry() - { - return backend.getFunctionRegistry(); - } - - public TypeRegistry getTypeRegistry() - { - return backend.getTypeRegistry(); - } - - public OperatorFactory getOperatorFactory() - { - return backend.getOperatorFactory(); - } - - public Type resolveReferenceType(final Object name) throws ContextEvaluationException - { - return backend.resolveReferenceType(name); - } - - public Object resolveReference(final Object name) throws ContextEvaluationException - { - if (name == null) - { - throw new NullPointerException(); - } - return backend.resolveReference(name); - } - - public boolean isReferenceDirty(final Object name) throws ContextEvaluationException - { - return backend.isReferenceDirty(name); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn.java b/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn.java deleted file mode 100644 index f5bd86c464c1..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.ReportAddIn; -import com.sun.star.report.ReportExpression; -import com.sun.star.report.ReportExpressionMetaData; -import com.sun.star.report.pentaho.expressions.SumExpression; - -/** - * This class is a dummy implementation. Ignore it for now, we may extend this - * one later. - */ -public class PentahoReportAddIn implements ReportAddIn -{ - - public PentahoReportAddIn() - { - } - - public ReportExpression createExpression(final int expression) - { - return (expression == 0) ? new SumExpression() : null; - } - - public int getExpressionCount() - { - return 1; - } - - public ReportExpressionMetaData getMetaData(final int expression) - { - // todo implement me - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine.java b/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine.java deleted file mode 100644 index a4ddc774c105..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.JobDefinitionException; -import com.sun.star.report.ReportEngineMetaData; -import com.sun.star.report.ReportJob; -import com.sun.star.report.ReportJobDefinition; -import com.sun.star.report.util.DefaultReportJobDefinition; -import org.jfree.report.JFreeReportBoot; - -public class PentahoReportEngine -{ - - private final ReportEngineMetaData metaData; - - public PentahoReportEngine() - { - JFreeReportBoot.getInstance().start(); - this.metaData = new PentahoReportEngineMetaData(); - } - - public ReportEngineMetaData getMetaData() - { - return metaData; - } - - public ReportJobDefinition createJobDefinition() - { - return new DefaultReportJobDefinition(metaData); - } - - /** - * Open points: How to define scheduling? - * - * @return the report job definition for the job description. - * - * @throws com.sun.star.report.JobDefinitionException - * - */ - public ReportJob createJob(final ReportJobDefinition definition) - throws JobDefinitionException - { - return new PentahoReportJob(definition); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData.java b/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData.java deleted file mode 100644 index 623de3ae996d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ReportEngineMetaData; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportJobFactory; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.pentaho.reporting.libraries.base.util.HashNMap; - - -public class PentahoReportEngineMetaData - implements ReportEngineMetaData -{ - - public static final String OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text"; - public static final String OPENDOCUMENT_SPREADSHEET = "application/vnd.oasis.opendocument.spreadsheet"; - public static final String OPENDOCUMENT_CHART = "application/vnd.oasis.opendocument.chart"; - public final static String CONTENT_TYPE = "content-type"; - public static final String DEBUG = "raw/text+xml"; - private final Set mandatoryParameters; - private final Map> parameterTypes; - private final HashNMap enumerationValues; - - public PentahoReportEngineMetaData() - { - mandatoryParameters = new HashSet(); - mandatoryParameters.add(ReportEngineParameterNames.CONTENT_TYPE); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_NAME); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_REPOSITORY); - mandatoryParameters.add(ReportEngineParameterNames.OUTPUT_NAME); - mandatoryParameters.add(ReportEngineParameterNames.OUTPUT_REPOSITORY); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); - mandatoryParameters.add(ReportEngineParameterNames.IMAGE_SERVICE); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_MASTER_COLUMNS); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_MASTER_VALUES); - mandatoryParameters.add(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS); - mandatoryParameters.add(ReportEngineParameterNames.AUTHOR); - mandatoryParameters.add(ReportEngineParameterNames.TITLE); - mandatoryParameters.add(ReportEngineParameterNames.MAXROWS); - - - parameterTypes = new HashMap>(); - parameterTypes.put(ReportEngineParameterNames.CONTENT_TYPE, String.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_NAME, String.class); - parameterTypes.put(ReportEngineParameterNames.OUTPUT_NAME, String.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_REPOSITORY, InputRepository.class); - parameterTypes.put(ReportEngineParameterNames.OUTPUT_REPOSITORY, OutputRepository.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, DataSourceFactory.class); - parameterTypes.put(ReportEngineParameterNames.IMAGE_SERVICE, ImageService.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY, ReportJobFactory.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_MASTER_COLUMNS, List.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_MASTER_VALUES, List.class); - parameterTypes.put(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS, List.class); - parameterTypes.put(ReportEngineParameterNames.AUTHOR, String.class); - parameterTypes.put(ReportEngineParameterNames.TITLE, String.class); - parameterTypes.put(ReportEngineParameterNames.MAXROWS, Integer.class); - - enumerationValues = new HashNMap(); - enumerationValues.add(CONTENT_TYPE, - PentahoReportEngineMetaData.OPENDOCUMENT_TEXT); - enumerationValues.add(CONTENT_TYPE, - PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET); - enumerationValues.add(CONTENT_TYPE, - PentahoReportEngineMetaData.OPENDOCUMENT_CHART); - enumerationValues.add(CONTENT_TYPE, PentahoReportEngineMetaData.DEBUG); - } - - public Object[] getEnumerationValues(final String parameter) - { - return enumerationValues.toArray(parameter); - } - - public Class getParameterType(final String parameter) - { - return parameterTypes.get(parameter); - } - - public boolean isEnumeration(final String parameter) - { - return enumerationValues.containsKey(parameter); - } - - /** - * Checks, whether a certain output type is available. Feed the mime-type of the output - * type in and you'll get a true or false back. - * - * @param mimeType - * @return true, if the output type is supported; false otherwise. - */ - public boolean isOutputSupported(final String mimeType) - { - return enumerationValues.containsValue(CONTENT_TYPE, mimeType.toLowerCase()); - } - - /** - * Lists all supported output parameters for the given mime-type. This listing can be - * used to build a generic user interface for configuring a certain output. - * - * @param mimeType - * @return - */ - public String[] getOutputParameters(final String mimeType) - { - return new String[0]; - } - - public boolean isMandatory(final String parameter) - { - return mandatoryParameters.contains(parameter); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob.java b/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob.java deleted file mode 100644 index 273e26c07bcf..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob.java +++ /dev/null @@ -1,410 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.JobDefinitionException; -import com.sun.star.report.JobProgressIndicator; -import com.sun.star.report.JobProperties; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ParameterMap; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportExecutionException; -import com.sun.star.report.ReportJob; -import com.sun.star.report.ReportJobDefinition; -import com.sun.star.report.SDBCReportDataFactory; -import com.sun.star.report.pentaho.loader.InputRepositoryLoader; -import com.sun.star.report.pentaho.model.OfficeDetailSection; -import com.sun.star.report.pentaho.model.OfficeDocument; -import com.sun.star.report.pentaho.model.OfficeGroup; -import com.sun.star.report.pentaho.model.OfficeReport; -import com.sun.star.report.pentaho.output.chart.ChartRawReportProcessor; -import com.sun.star.report.pentaho.output.spreadsheet.SpreadsheetRawReportProcessor; -import com.sun.star.report.pentaho.output.text.TextRawReportProcessor; - -import java.io.IOException; - -import java.lang.Integer; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.report.expressions.Expression; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.DefaultReportJob; -import org.jfree.report.flow.ReportProcessor; -import org.jfree.report.flow.raw.XmlPrintReportProcessor; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; -import org.jfree.report.util.ReportParameters; - -import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; -import org.pentaho.reporting.libraries.formula.lvalues.FormulaFunction; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; -import org.pentaho.reporting.libraries.formula.lvalues.Term; -import org.pentaho.reporting.libraries.formula.parser.FormulaParser; -import org.pentaho.reporting.libraries.formula.parser.ParseException; -import org.pentaho.reporting.libraries.resourceloader.Resource; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - - -/** - * ToDo: Allow interrupting of jobs and report the report progress - */ -public class PentahoReportJob implements ReportJob -{ - - private static final Log LOGGER = LogFactory.getLog(PentahoReportJob.class); - private boolean finished; - private final List listeners; - private final DataSourceFactory dataSourceFactory; - private final OutputRepository outputRepository; - private final JobProperties jobProperties; - private OfficeDocument report; - private final ResourceManager resourceManager; - private final String outputName; - private final ImageService imageService; - private final InputRepository inputRepository; - private final ReportJobDefinition definition; - private final List masterValues; - private final List detailColumns; - - public ReportJobDefinition getDefinition() - { - return definition; - } - - public PentahoReportJob(final ReportJobDefinition definition) - throws JobDefinitionException - { - if (definition == null) - { - throw new NullPointerException(); - } - - this.definition = definition; - this.listeners = new ArrayList(); - this.jobProperties = definition.getProcessingParameters().copy(); - - this.dataSourceFactory = (DataSourceFactory) jobProperties.getProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); - if (this.dataSourceFactory == null) - { - throw new JobDefinitionException("DataSourceFactory must not be null."); - } - - this.outputRepository = (OutputRepository) jobProperties.getProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY); - if (this.outputRepository == null) - { - throw new JobDefinitionException("OutputRepository must not be null."); - } - - this.inputRepository = - (InputRepository) jobProperties.getProperty(ReportEngineParameterNames.INPUT_REPOSITORY); - if (inputRepository == null) - { - throw new JobDefinitionException("InputRepository must not be null."); - } - - this.outputName = (String) jobProperties.getProperty(ReportEngineParameterNames.OUTPUT_NAME); - if (outputName == null) - { - throw new JobDefinitionException("OutputName must not be null"); - } - - this.imageService = (ImageService) jobProperties.getProperty(ReportEngineParameterNames.IMAGE_SERVICE); - if (imageService == null) - { - throw new JobDefinitionException("A valid image-service implementation must be given."); - } - - this.masterValues = (ArrayList) jobProperties.getProperty(ReportEngineParameterNames.INPUT_MASTER_VALUES); - this.detailColumns = (ArrayList) jobProperties.getProperty(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS); - Integer maxRows=(Integer) jobProperties.getProperty(ReportEngineParameterNames.MAXROWS); - - this.resourceManager = new ResourceManager(); - this.resourceManager.registerDefaults(); - this.resourceManager.registerLoader(new InputRepositoryLoader(inputRepository)); - - try - { - this.report = parseReport(definition); - } - catch (ResourceException e) - { - throw new JobDefinitionException("Failed to parse the report.", e); - } - } - - private OfficeDocument parseReport(final ReportJobDefinition definition) - throws ResourceException, JobDefinitionException - { - final String reportResource = (String) this.jobProperties.getProperty(ReportEngineParameterNames.INPUT_NAME); - if (reportResource == null) - { - throw new JobDefinitionException("Report definition name must be given"); - } - - final Resource res = resourceManager.createDirectly("sun:oo://" + reportResource, OfficeDocument.class); - final OfficeDocument tempReport = (OfficeDocument) res.getResource(); - tempReport.setDataFactory(new StarReportDataFactory(dataSourceFactory)); - tempReport.setJobProperties(definition.getProcessingParameters().copy()); - final ReportParameters inputParameters = tempReport.getInputParameters(); - - final ParameterMap queryParameters = definition.getQueryParameters(); - final String[] paramKeys = queryParameters.keys(); - for (int i = 0; i < paramKeys.length; i++) - { - final String key = paramKeys[i]; - inputParameters.put(key, queryParameters.get(key)); - } - - return tempReport; - } - - public void addProgressIndicator(final JobProgressIndicator indicator) - { - listeners.add(indicator); - } - - /** - * Interrupt the job. - */ - public void interrupt() - { - // hey, not yet .. - } - - /** - * Queries the jobs result status. - * - * @return true, if the job is finished (or has been interrupted), false if the job - * waits for activation. - */ - public boolean isFinished() - { - return finished; - } - - public void finish() - { - finished = true; - } - - /** - * Queries the jobs execution status. - * - * @return true, if the job is currently running, false otherwise. - */ - public boolean isRunning() - { - return !finished; - } - - public void removeProgressIndicator(final JobProgressIndicator indicator) - { - listeners.remove(indicator); - } - - private void collectGroupExpressions(final Node[] nodes, final List expressions, final FormulaParser parser, final Expression reportFunctions[]) - { - for (int i = 0; i < nodes.length; i++) - { - final Node node = nodes[i]; - if (node instanceof OfficeGroup) - { - final OfficeGroup group = (OfficeGroup) node; - final FormulaExpression exp = (FormulaExpression) group.getGroupingExpression(); - if (exp == null) - { - continue; - } - - try - { - final String expression = exp.getFormulaExpression(); - if (expression == null) - { - continue; - } - final FormulaFunction function = (FormulaFunction) parser.parse(expression); - final LValue[] parameters = function.getChildValues(); - if (parameters.length > 0) - { - String name = parameters[0].toString(); - if (parameters[0] instanceof ContextLookup) - { - final ContextLookup context = (ContextLookup) parameters[0]; - name = context.getName(); - } - for (int j = 0; j < reportFunctions.length; j++) - { - if (reportFunctions[j] instanceof FormulaExpression) - { - final FormulaExpression reportExp = (FormulaExpression) reportFunctions[j]; - - if (reportExp.getName().equals(name)) - { - LValue val = parser.parse(reportExp.getFormulaExpression()); - while( !(val instanceof ContextLookup)) - { - if (val instanceof Term) - { - val = ((Term)val).getHeadValue(); - } - else if (val instanceof FormulaFunction) - { - final FormulaFunction reportFunction = (FormulaFunction) val; - val = reportFunction.getChildValues()[0]; - } - } - if (val instanceof ContextLookup) - { - final ContextLookup context = (ContextLookup) val; - name = context.getName(); - } - break; - } - } - } - - final Object[] pair = new Object[2]; - pair[0] = name; - pair[1] = group.getAttribute(OfficeNamespaces.OOREPORT_NS, "sort-ascending"); - expressions.add(pair); - } - } - catch (ParseException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } - } - else if (node instanceof OfficeDetailSection) - { - return; - } - if (node instanceof Section) - { - final Section section = (Section) node; - collectGroupExpressions(section.getNodeArray(), expressions, parser, reportFunctions); - } - } - } - - private void setMetaDataProperties(DefaultReportJob job) - { - job.getConfiguration().setConfigProperty(ReportEngineParameterNames.AUTHOR, (String) jobProperties.getProperty(ReportEngineParameterNames.AUTHOR)); - job.getConfiguration().setConfigProperty(ReportEngineParameterNames.TITLE, (String) jobProperties.getProperty(ReportEngineParameterNames.TITLE)); - } - - /** - * Although we might want to run the job as soon as it has been created, sometimes it is - * wiser to let the user add some listeners first. If we execute at once, the user - * either has to deal with threading code or wont receive any progress information in - * single threaded environments. - */ - public void execute() - throws ReportExecutionException, IOException - { - final DefaultReportJob job = new DefaultReportJob(report); - setMetaDataProperties(job); - final String contentType = (String) jobProperties.getProperty(ReportEngineParameterNames.CONTENT_TYPE); - //noinspection OverlyBroadCatchBlock - try - { - final ReportParameters parameters = job.getParameters(); - - if (masterValues != null && detailColumns != null) - { - parameters.put(SDBCReportDataFactory.MASTER_VALUES, masterValues); - parameters.put(SDBCReportDataFactory.DETAIL_COLUMNS, detailColumns); - } - - final Node[] nodes = report.getNodeArray(); - - final FormulaParser parser = new FormulaParser(); - final ArrayList expressions = new ArrayList(); - final OfficeReport officeReport = (OfficeReport) ((Section) nodes[0]).getNode(0); - final Section reportBody = (Section) officeReport.getBodySection(); - collectGroupExpressions(reportBody.getNodeArray(), expressions, parser, officeReport.getExpressions()); - parameters.put(SDBCReportDataFactory.GROUP_EXPRESSIONS, expressions); - final String command = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, "command"); - final String commandType = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, SDBCReportDataFactory.COMMAND_TYPE); - final String escapeProcessing = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, SDBCReportDataFactory.ESCAPE_PROCESSING); - report.setQuery(command); - parameters.put(SDBCReportDataFactory.COMMAND_TYPE, commandType); - parameters.put(SDBCReportDataFactory.ESCAPE_PROCESSING, !("false".equals(escapeProcessing))); - - final String filter = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, "filter"); - parameters.put(SDBCReportDataFactory.UNO_FILTER, filter); - - parameters.put(ReportEngineParameterNames.MAXROWS, report.getJobProperties().getProperty(ReportEngineParameterNames.MAXROWS)); - - final long startTime = System.currentTimeMillis(); - final ReportProcessor rp = getProcessorForContentType(contentType); - rp.processReport(job); - job.close(); - final long endTime = System.currentTimeMillis(); - LOGGER.debug("Report processing time: " + (endTime - startTime)); - } - catch (final Exception e) - { - String message = e.getMessage(); - if (message == null || message.length() == 0) - { - message = "Failed to process the report"; - } - throw new ReportExecutionException(message, e); - } - - } - - protected ReportProcessor getProcessorForContentType(final String mimeType) - throws ReportExecutionException - { - final ReportProcessor ret; - - if (PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET.equals(mimeType)) - { - ret = new SpreadsheetRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); - } - else if (PentahoReportEngineMetaData.OPENDOCUMENT_TEXT.equals(mimeType)) - { - ret = new TextRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); - } - else if (PentahoReportEngineMetaData.OPENDOCUMENT_CHART.equals(mimeType)) - { - ret = new ChartRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); - } - else if (PentahoReportEngineMetaData.DEBUG.equals(mimeType)) - { - ret = new XmlPrintReportProcessor(System.out, "ISO-8859-1"); - } - else - { - throw new ReportExecutionException("Invalid mime-type"); - } - - return ret; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper.java deleted file mode 100644 index ae962b273f7b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.sheet.FormulaLanguage; -import com.sun.star.sheet.FormulaMapGroup; -import com.sun.star.sheet.FormulaOpCodeMapEntry; -import com.sun.star.sheet.FormulaToken; - -import java.util.ArrayList; -import java.util.Map; - -public final class SOFormulaOpCodeMapper extends WeakBase - implements com.sun.star.sheet.XFormulaOpCodeMapper, XServiceInfo -{ - - private static final String __serviceName = "com.sun.star.report.pentaho.SOFormulaOpCodeMapper"; - private final SOFormulaParser parser; - // attributes - final private int m_OpCodeExternal = 0; - final private int m_OpCodeUnknown = 0; - - public SOFormulaOpCodeMapper(SOFormulaParser parser) - { - this.parser = parser; - } - - // com.sun.star.sheet.XFormulaOpCodeMapper: - public int getOpCodeExternal() - { - return m_OpCodeExternal; - } - - public int getOpCodeUnknown() - { - return m_OpCodeUnknown; - } - - public com.sun.star.sheet.FormulaToken[] getMappings(String[] Names, int Language) throws com.sun.star.lang.IllegalArgumentException - { - if (Language != FormulaLanguage.ODFF) - { - throw new IllegalArgumentException(); - } - final ArrayList token = new ArrayList(); - final Map parserNames = parser.getNames(); - for (int i = 0; i < Names.length; i++) - { - if (parserNames.containsKey(Names[i])) - { - token.add(((FormulaOpCodeMapEntry) parserNames.get(Names[i])).Token); - } - - } - return token.toArray(new FormulaToken[token.size()]); - } - - public com.sun.star.sheet.FormulaOpCodeMapEntry[] getAvailableMappings(int Language, int Groups) throws com.sun.star.lang.IllegalArgumentException - { - if (Language != FormulaLanguage.ODFF) - { - throw new IllegalArgumentException(); - } - final ArrayList token = new ArrayList(); - if (Groups == FormulaMapGroup.SPECIAL) - { - return parser.getSpecialOpCodes().toArray(new FormulaOpCodeMapEntry[parser.getSpecialOpCodes().size()]); - } - else - { - if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values()); - } - if ((Groups & FormulaMapGroup.SEPARATORS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.SEPARATORS).values()); - } - if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values()); - } - if ((Groups & FormulaMapGroup.UNARY_OPERATORS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.UNARY_OPERATORS).values()); - } - if ((Groups & FormulaMapGroup.BINARY_OPERATORS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.BINARY_OPERATORS).values()); - } - if ((Groups & FormulaMapGroup.FUNCTIONS) != 0) - { - token.addAll(parser.getGroup(SOFormulaParser.FUNCTIONS).values()); - } - } - - return token.toArray(new FormulaOpCodeMapEntry[token.size()]); - } - - public String getImplementationName() - { - return SOFormulaOpCodeMapper.class.getName(); - } - - public boolean supportsService(String sServiceName) - { - return sServiceName.equals(__serviceName); - } - - public String[] getSupportedServiceNames() - { - return getServiceNames(); - } - - /** - * This method is a simple helper function to used in the static component initialisation functions as well as - * in getSupportedServiceNames. - * @return - */ - public static String[] getServiceNames() - { - return new String[] - { - __serviceName - }; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java b/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java deleted file mode 100644 index 3e1b623044ed..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java +++ /dev/null @@ -1,434 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - - -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lib.uno.helper.ComponentBase; -import com.sun.star.lib.uno.helper.PropertySetMixin; -import com.sun.star.sheet.FormulaLanguage; -import com.sun.star.sheet.FormulaMapGroup; -import com.sun.star.sheet.FormulaMapGroupSpecialOffset; -import com.sun.star.sheet.FormulaOpCodeMapEntry; -import com.sun.star.sheet.FormulaToken; -import com.sun.star.sheet.XFormulaOpCodeMapper; -import com.sun.star.uno.Any; -import com.sun.star.uno.Exception; -import com.sun.star.uno.Type; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.io.StringReader; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.pentaho.reporting.libraries.base.config.Configuration; -import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; -import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; -import org.pentaho.reporting.libraries.formula.parser.FormulaParser; -import org.pentaho.reporting.libraries.formula.parser.GeneratedFormulaParserConstants; -import org.pentaho.reporting.libraries.formula.parser.GeneratedFormulaParserTokenManager; -import org.pentaho.reporting.libraries.formula.parser.JavaCharStream; -import org.pentaho.reporting.libraries.formula.parser.ParseException; -import org.pentaho.reporting.libraries.formula.parser.Token; -import org.pentaho.reporting.libraries.formula.parser.TokenMgrError; - - -public final class SOFormulaParser extends ComponentBase - implements com.sun.star.report.meta.XFormulaParser, XServiceInfo -{ - /* Need this to get around generics array creation restriction */ - private static class StringOpcodeMap extends HashMap {} - - public static final int SEPARATORS = 0; - public static final int ARRAY_SEPARATORS = 1; - public static final int UNARY_OPERATORS = 2; - public static final int BINARY_OPERATORS = 3; - public static final int FUNCTIONS = 4; - private final XComponentContext m_xContext; - private final PropertySetMixin m_prophlp; - private static final String __serviceName = "com.sun.star.report.meta.FormulaParser"; - private static final String OPERATORS = "org.pentaho.reporting.libraries.formula.operators."; - // attributes - final private List m_OpCodeMap = new ArrayList(); - private XFormulaOpCodeMapper formulaOpCodeMapper = null; - private final Map parserAllOpCodes = new HashMap(); - private final Map parserNames = new HashMap(); - private final StringOpcodeMap[] groupOpCodes = new StringOpcodeMap[5]; - private final List specialOpCodes = new ArrayList(); - private int ownTokenCounter = 1000; - private final FormulaOpCodeMapEntry opCodePush; - private final FormulaParser parser; - - public SOFormulaParser(final XComponentContext context) - { - - m_xContext = context; - final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - - parser = new FormulaParser(); - try - { - final XFormulaOpCodeMapper mapper = (XFormulaOpCodeMapper) UnoRuntime.queryInterface(XFormulaOpCodeMapper.class, m_xContext.getServiceManager().createInstanceWithContext("simple.formula.FormulaOpCodeMapperObj", m_xContext)); - FormulaOpCodeMapEntry[] opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.FUNCTIONS); - final DefaultFormulaContext defaultContext = new DefaultFormulaContext(); - final FunctionRegistry functionRegistry = defaultContext.getFunctionRegistry(); - - String[] names = functionRegistry.getFunctionNames(); - addOpCodes(names, opCodes, FUNCTIONS); - names = getOperators(defaultContext, OPERATORS); - opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.UNARY_OPERATORS); - addOpCodes(names, opCodes, UNARY_OPERATORS); - opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.BINARY_OPERATORS); - addOpCodes(names, opCodes, BINARY_OPERATORS); - - names = GeneratedFormulaParserConstants.tokenImage.clone(); - for (int i = 0; i < names.length; i++) - { - final String token = names[i]; - if (token != null && token.length() > 0 && token.charAt(0) == '"') - { - names[i] = token.substring(1, token.length() - 1); - } - } - opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.SEPARATORS); - addOpCodes(names, opCodes, SEPARATORS, false); - - opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.ARRAY_SEPARATORS); - addOpCodes(names, opCodes, ARRAY_SEPARATORS, false); - - opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.SPECIAL); - - for (int i = 0; i < opCodes.length; i++) - { - final FormulaOpCodeMapEntry opCode = opCodes[i]; - parserAllOpCodes.put(opCode.Token.OpCode, opCode); - specialOpCodes.add(opCode); - } - // addOpCodes(names, opCodes,SPECIAL,false); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - opCodePush = specialOpCodes.get(FormulaMapGroupSpecialOffset.PUSH); - Thread.currentThread().setContextClassLoader(cl); - // use the last parameter of the PropertySetMixin constructor - // for your optional attributes if necessary. See the documentation - // of the PropertySetMixin helper for further information. - // Ensure that your attributes are initialized correctly! - m_prophlp = new PropertySetMixin(m_xContext, this, - new Type(com.sun.star.report.meta.XFormulaParser.class), null); - } - - // com.sun.star.sheet.XFormulaParser: - public com.sun.star.sheet.FormulaToken[] parseFormula(String aFormula, com.sun.star.table.CellAddress aReferencePos) - { - final ArrayList tokens = new ArrayList(); - if (!"=".equals(aFormula)) - { - String formula; - if (aFormula.charAt(0) == '=') - { - formula = aFormula.substring(1); - } - else - { - formula = aFormula; - } - final ArrayList images = new ArrayList(); - try - { - int brackets = 0; - final GeneratedFormulaParserTokenManager tokenParser = new GeneratedFormulaParserTokenManager(new JavaCharStream(new StringReader(formula), 1, 1)); - Token token = tokenParser.getNextToken(); - while (token.kind != GeneratedFormulaParserConstants.EOF) - { - final FormulaToken formulaToken; - images.add(token.image); - final String upper = token.image.toUpperCase(); - if (parserNames.containsKey(upper)) - { - if ("(".equals(token.image)) - { - brackets++; - } - else if (")".equals(token.image)) - { - --brackets; - } - final FormulaOpCodeMapEntry opCode = parserNames.get(upper); - formulaToken = opCode.Token; - } - else if (token.kind == GeneratedFormulaParserConstants.WHITESPACE) - { - final FormulaOpCodeMapEntry opCode = specialOpCodes.get(FormulaMapGroupSpecialOffset.SPACES); - formulaToken = opCode.Token; - } - else - { - formulaToken = new FormulaToken(); - formulaToken.OpCode = opCodePush.Token.OpCode; - formulaToken.Data = new Any(Type.STRING, token.image); - } - - tokens.add(formulaToken); - token = tokenParser.getNextToken(); - } - if (brackets > 0) - { - final FormulaOpCodeMapEntry opCode = parserNames.get(")"); - while (brackets-- != 0) - { - formula = formula.concat(")"); - images.add(")"); - tokens.add(opCode.Token); - } - - } - - parser.parse(formula); - } - catch (ParseException ex) - { - boolean found = false; - // error occurred so all token must be bad - for (int i = 0; i < tokens.size(); i++) - { - if (!found && ex.currentToken != null && images.get(i).equals(ex.currentToken.image)) - { - found = true; - } - if (found) - { - final FormulaToken dest = new FormulaToken(); - dest.OpCode = specialOpCodes.get(FormulaMapGroupSpecialOffset.BAD).Token.OpCode; - dest.Data = new Any(Type.STRING, images.get(i)); - tokens.remove(i); - tokens.add(i, dest); - } - } - } - catch (java.lang.Exception e) - { - } - catch (TokenMgrError e) - { - } - } - return tokens.toArray(new FormulaToken[tokens.size()]); - } - - public String printFormula(com.sun.star.sheet.FormulaToken[] aTokens, com.sun.star.table.CellAddress aReferencePos) - { - final StringBuffer ret = new StringBuffer(); - for (int i = 0; i < aTokens.length; i++) - { - final FormulaToken formulaToken = aTokens[i]; - if (formulaToken.OpCode == opCodePush.Token.OpCode && !formulaToken.Data.equals(Any.VOID)) - { - ret.append(formulaToken.Data); - } - else if (parserAllOpCodes.containsKey(formulaToken.OpCode)) - { - final FormulaOpCodeMapEntry opCode = parserAllOpCodes.get(formulaToken.OpCode); - if (opCode.Name.length() > 0) - { - ret.append(opCode.Name); - } - else if (!formulaToken.Data.equals(Any.VOID)) - { - ret.append(formulaToken.Data); - } - } - } - return ret.toString(); - } - - // com.sun.star.beans.XPropertySet: - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - return m_prophlp.getPropertySetInfo(); - } - - public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.setPropertyValue(aPropertyName, aValue); - } - - public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - return m_prophlp.getPropertyValue(aPropertyName); - } - - public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addPropertyChangeListener(aPropertyName, xListener); - } - - public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removePropertyChangeListener(aPropertyName, xListener); - } - - public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addVetoableChangeListener(aPropertyName, xListener); - } - - public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); - } - - // com.sun.star.report.meta.XFormulaParser: - public com.sun.star.sheet.FormulaOpCodeMapEntry[] getOpCodeMap() - { - return m_OpCodeMap.toArray(new FormulaOpCodeMapEntry[m_OpCodeMap.size()]); - } - - public void setOpCodeMap(com.sun.star.sheet.FormulaOpCodeMapEntry[] the_value) - { - } - - public String getImplementationName() - { - return SOFormulaParser.class.getName(); - } - - public boolean supportsService(String sServiceName) - { - return sServiceName.equals(__serviceName); - } - - public String[] getSupportedServiceNames() - { - return getServiceNames(); - } - - /** - * This method is a simple helper function to used in the static component initialisation functions as well as - * in getSupportedServiceNames. - * @return - */ - public static String[] getServiceNames() - { - return new String[] - { - __serviceName - }; - } - - public XFormulaOpCodeMapper getFormulaOpCodeMapper() - { - if (formulaOpCodeMapper == null) - { - formulaOpCodeMapper = new SOFormulaOpCodeMapper(this); - } - - return formulaOpCodeMapper; - } - - private void addOpCodes(String[] names, FormulaOpCodeMapEntry[] opCodes, int group) - { - addOpCodes(names, opCodes, group, true); - } - - private void addOpCodes(String[] names, FormulaOpCodeMapEntry[] opCodes, int group, boolean add) - { - groupOpCodes[group] = new StringOpcodeMap(); - for (int j = 0; j < names.length; j++) - { - FormulaOpCodeMapEntry opCode = null; - int i = 0; - for (; i < opCodes.length; i++) - { - opCode = opCodes[i]; - if (names[j].equals(opCode.Name)) - { - break; - } - } - if (i >= opCodes.length) - { - if (!add) - { - continue; - } - final FormulaToken token = new FormulaToken(ownTokenCounter++, Any.VOID); - opCode = new FormulaOpCodeMapEntry(names[j], token); - } - parserNames.put(names[j], opCode); - parserAllOpCodes.put(opCode.Token.OpCode, opCode); - groupOpCodes[group].put(opCode.Token.OpCode, opCode); - } - } - - public Map getNames() - { - return parserNames; - } - - public Map getGroup(int group) - { - return groupOpCodes[group]; - } - - private String[] getOperators(DefaultFormulaContext defaultContext, final String _kind) - { - final ArrayList ops = new ArrayList(); - final Configuration configuration = defaultContext.getConfiguration(); - final Iterator iter = configuration.findPropertyKeys(_kind); - while (iter.hasNext()) - { - final String configKey = (String) iter.next(); - if (!configKey.endsWith(".class")) - { - continue; - } - final String operatorClass = configuration.getConfigProperty(configKey); - if (operatorClass == null) - { - continue; - } - if (operatorClass.length() == 0) - { - continue; - } - final String tokenKey = configKey.substring(0, configKey.length() - ".class".length()) + ".token"; - final String token = configuration.getConfigProperty(tokenKey); - if (token == null) - { - continue; - } - ops.add(token.trim()); - } - return ops.toArray(new String[ops.size()]); - } - - public List getSpecialOpCodes() - { - return specialOpCodes; - } -} - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager.java b/reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager.java deleted file mode 100644 index 5ffcc022dfff..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.container.NoSuchElementException; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lib.uno.helper.ComponentBase; -import com.sun.star.report.meta.XFunctionCategory; -import com.sun.star.report.meta.XFunctionDescription; -import com.sun.star.report.meta.XFunctionManager; -import com.sun.star.uno.XComponentContext; - -import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; -import org.pentaho.reporting.libraries.formula.function.FunctionCategory; -import org.pentaho.reporting.libraries.formula.function.FunctionDescription; -import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; - -public final class SOFunctionManager extends ComponentBase implements XFunctionManager, XServiceInfo -{ - - private final XComponentContext m_xContext; - /** - * The service name, that must be used to get an instance of this service. - */ - private static final String __serviceName = - "com.sun.star.report.meta.FunctionManager"; - final private FunctionCategory[] categories; - final private FunctionRegistry functionRegistry; - final private DefaultFormulaContext defaultContext; - - public SOFunctionManager(XComponentContext context) - { - m_xContext = context; - final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - defaultContext = new DefaultFormulaContext(); - functionRegistry = defaultContext.getFunctionRegistry(); - categories = functionRegistry.getCategories(); - Thread.currentThread().setContextClassLoader(cl); - - } - - /** - * This method returns an array of all supported service names. - * - * @return Array of supported service names. - */ - public String[] getSupportedServiceNames() - { - return getServiceNames(); - } - - /** - * This method is a simple helper function to used in the static component initialisation functions as well as - * in getSupportedServiceNames. - * @return - */ - public static String[] getServiceNames() - { - return new String[] - { - __serviceName - }; - } - - /** - * This method returns true, if the given service will be supported by the component. - * - * @param sServiceName Service name. - * @return True, if the given service name will be supported. - */ - public boolean supportsService(final String sServiceName) - { - return sServiceName.equals(__serviceName); - } - - /** - * Return the class name of the component. - * - * @return Class name of the component. - */ - public String getImplementationName() - { - return SOFunctionManager.class.getName(); - } - - // com.sun.star.container.XElementAccess: - public com.sun.star.uno.Type getElementType() - { - return new com.sun.star.uno.Type(XFunctionCategory.class); - } - - public boolean hasElements() - { - return categories.length != 0; - } - - // com.sun.star.container.XIndexAccess: - public int getCount() - { - return categories.length; - } - - public Object getByIndex(int Index) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException - { - return getCategory(Index); - } - - // com.sun.star.report.meta.XFunctionManager: - public com.sun.star.report.meta.XFunctionCategory getCategory(int position) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException - { - if (position >= categories.length) - { - throw new com.sun.star.lang.IndexOutOfBoundsException(); - } - return new StarFunctionCategory(defaultContext, m_xContext, functionRegistry, position, categories[position]); - } - - public XFunctionDescription getFunctionByName(String arg0) throws NoSuchElementException - { - final FunctionDescription func = functionRegistry.getMetaData(arg0); - if (func == null) - { - throw new NoSuchElementException(); - } - int i = 0; - for (; i < categories.length; i++) - { - if (categories[i] == func.getCategory()) - { - break; - } - } - try - { - return new StarFunctionDescription(defaultContext, m_xContext, getCategory(i), func); - } - catch (Exception ex) - { - } - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java deleted file mode 100644 index 5e891396f63d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java +++ /dev/null @@ -1,420 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.beans.NamedValue; -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertyChangeListener; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.XVetoableChangeListener; -import com.sun.star.container.XChild; -import com.sun.star.embed.XStorage; -import com.sun.star.frame.XModel; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.XInitialization; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lib.uno.helper.Factory; -import com.sun.star.lib.uno.helper.PropertySetMixin; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.registry.InvalidRegistryException; -import com.sun.star.registry.InvalidValueException; -import com.sun.star.registry.XRegistryKey; -import com.sun.star.registry.XSimpleRegistry; -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.JobProperties; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportExecutionException; -import com.sun.star.report.ReportJob; -import com.sun.star.report.ReportJobDefinition; -import com.sun.star.report.ReportJobFactory; -import com.sun.star.report.SDBCReportDataFactory; -import com.sun.star.report.SOImageService; -import com.sun.star.report.StorageRepository; -import com.sun.star.report.XReportDefinition; -import com.sun.star.sdb.XDocumentDataSource; -import com.sun.star.sdbc.XConnection; -import com.sun.star.sdbc.XRowSet; -import com.sun.star.task.XJob; -import com.sun.star.uno.Exception; -import com.sun.star.uno.Type; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * This class capsulates the class, that implements the minimal component, a factory for creating the service - * (__getComponentFactory) and a method, that writes the information into the given registry key - * (__writeRegistryServiceInfo). - */ -public class SOReportJobFactory -{ - - private SOReportJobFactory() - { - } - - public static class _SOReportJobFactory extends WeakBase implements XInitialization, XServiceInfo, XJob, XPropertySet, ReportJobFactory - { - - private static final Log LOGGER = LogFactory.getLog(_SOReportJobFactory.class); - /** - * The service name, that must be used to get an instance of this service. - */ - private static final String __serviceName = - "com.sun.star.report.pentaho.SOReportJobFactory"; - private final PropertySetMixin m_prophlp; - /** - * The initial component contextr, that gives access to the service manager, supported singletons, ... It's - * often later used - */ - private final XComponentContext m_cmpCtx; - private XConnection activeConnection; - private XReportDefinition report; - - public _SOReportJobFactory(final XComponentContext xCompContext) - { - m_cmpCtx = xCompContext; - m_prophlp = new PropertySetMixin(m_cmpCtx, this, - new Type(XJob.class), - null); // no optionals - } - - /** - * This method is a member of the interface for initializing an object directly after its creation. - * - * @param object This array of arbitrary objects will be passed to the component after its creation. - * @throws Exception Every exception will not be handled, but will be passed to the caller. - */ - public void initialize(final Object[] object) - throws com.sun.star.uno.Exception - { - /* The component describes what arguments its expected and in which - * order!At this point you can read the objects and can intialize - * your component using these objects. - */ - } - - /** - * This method returns an array of all supported service names. - * - * @return Array of supported service names. - */ - public String[] getSupportedServiceNames() - { - return getServiceNames(); - } - - /** - * This method is a simple helper function to used in the static component initialisation functions as well as - * in getSupportedServiceNames. - * @return - */ - public static String[] getServiceNames() - { - return new String[] - { - __serviceName - }; - } - - /** - * This method returns true, if the given service will be supported by the component. - * - * @param sServiceName Service name. - * @return True, if the given service name will be supported. - */ - public boolean supportsService(final String sServiceName) - { - return sServiceName.equals(__serviceName); - } - - /** - * Return the class name of the component. - * - * @return Class name of the component. - */ - public String getImplementationName() - { - return SOReportJobFactory.class.getName(); - } - - private String getLocaleFromRegistry(final XSimpleRegistry simpleReg, final String path, final String value) - { - String currentLocale = null; - try - { - simpleReg.open(path, true, false); - final XRegistryKey xRegistryRootKey = simpleReg.getRootKey(); - // read locale - final XRegistryKey locale = xRegistryRootKey.openKey(value); - if (locale != null) - { - final String newLocale = locale.getStringValue(); - if (newLocale != null) - { - currentLocale = newLocale.replace('-', '_'); - } - } - } - catch (InvalidValueException ex) - { - Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); - } - catch (InvalidRegistryException ex) - { - Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); - } - - return currentLocale; - } - - public Object execute(final NamedValue[] namedValue) - throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception - { - final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - try - { - final XSimpleRegistry simpleReg = (XSimpleRegistry) UnoRuntime.queryInterface(XSimpleRegistry.class, - m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.configuration.ConfigurationRegistry", m_cmpCtx)); - - String currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Setup", "L10N/ooSetupSystemLocale"); - if (currentLocale == null || "".equals(currentLocale)) - { - currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Office.Linguistic", "General/DefaultLocale"); - } - if (currentLocale != null && !"".equals(currentLocale)) - { - System.setProperty("org.pentaho.reporting.libraries.formula.locale", currentLocale); - } - final ReportJob job = createReportJob(namedValue); - job.execute(); - - } - catch (java.lang.Exception e) - { - LOGGER.error("ReportProcessing failed", e); - throw new com.sun.star.lang.WrappedTargetException(e.getMessage(), this, null); - } - catch (java.lang.IncompatibleClassChangeError e2) - { - LOGGER.error("Detected an IncompatibleClassChangeError"); - throw new com.sun.star.lang.WrappedTargetException("caught a " + e2.getClass().getName(), this, new com.sun.star.uno.Exception(e2.getLocalizedMessage())); - } - Thread.currentThread().setContextClassLoader(cl); - - return null; - } - - public ReportJob createReportJob(final NamedValue[] namedValue) throws IllegalArgumentException, ReportExecutionException, Exception - { - XStorage input = null; - XStorage output = null; - XRowSet rowSet = null; - String mimetype = null; - String author = null; - String title = null; - Integer maxRows = null; - - for (int i = 0; i < namedValue.length; ++i) - { - final NamedValue aProps = namedValue[i]; - if ("ActiveConnection".equalsIgnoreCase(aProps.Name)) - { - activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, aProps.Value); - } - else if ("ReportDefinition".equalsIgnoreCase(aProps.Name)) - { - report = (XReportDefinition) UnoRuntime.queryInterface(XReportDefinition.class, aProps.Value); - } - else if ("InputStorage".equalsIgnoreCase(aProps.Name)) - { - input = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); - } - else if ("OutputStorage".equalsIgnoreCase(aProps.Name)) - { - output = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); - } - else if ("RowSet".equalsIgnoreCase(aProps.Name)) - { - rowSet = (XRowSet) UnoRuntime.queryInterface(XRowSet.class, aProps.Value); - } - else if ("mimetype".equalsIgnoreCase(aProps.Name)) - { - mimetype = (String) aProps.Value; - } - else if ("MaxRows".equalsIgnoreCase(aProps.Name)) - { - maxRows = (Integer) aProps.Value; - } - else if (ReportEngineParameterNames.AUTHOR.equalsIgnoreCase(aProps.Name)) - { - author = (String) aProps.Value; - } - else if (ReportEngineParameterNames.TITLE.equalsIgnoreCase(aProps.Name)) - { - title = (String) aProps.Value; - } - } - - if (input == null || output == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - - if (rowSet == null) - { - if (report == null || activeConnection == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - mimetype = report.getMimeType(); - } - else - { - final XPropertySet set = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); - if (set == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, set.getPropertyValue("ActiveConnection")); - } - if (mimetype == null) - { - mimetype = PentahoReportEngineMetaData.OPENDOCUMENT_TEXT; - } - - final XChild child = UnoRuntime.queryInterface(XChild.class, activeConnection); - final XDocumentDataSource docSource = UnoRuntime.queryInterface(XDocumentDataSource.class, child.getParent()); - final XModel model = UnoRuntime.queryInterface(XModel.class, docSource.getDatabaseDocument()); - final DataSourceFactory dataFactory = new SDBCReportDataFactory(m_cmpCtx, activeConnection); - final StorageRepository storageRepository = new StorageRepository(input, output, model.getURL()); - - final String inputName = "content.xml"; - final String outputName = "content.xml"; - - final PentahoReportEngine engine = new PentahoReportEngine(); - final ReportJobDefinition definition = engine.createJobDefinition(); - final JobProperties procParms = definition.getProcessingParameters(); - procParms.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, storageRepository); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, storageRepository); - procParms.setProperty(ReportEngineParameterNames.INPUT_NAME, inputName); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_NAME, outputName); - procParms.setProperty(ReportEngineParameterNames.CONTENT_TYPE, mimetype); - procParms.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataFactory); - procParms.setProperty(ReportEngineParameterNames.IMAGE_SERVICE, new SOImageService(m_cmpCtx)); - procParms.setProperty(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY, this); - procParms.setProperty(ReportEngineParameterNames.MAXROWS, maxRows); - if (author != null) - { - procParms.setProperty(ReportEngineParameterNames.AUTHOR, author); - } - if (title != null) - { - procParms.setProperty(ReportEngineParameterNames.TITLE, title); - } - - return engine.createJob(definition); - } - - // com.sun.star.beans.XPropertySet: - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - return m_prophlp.getPropertySetInfo(); - } - - public void setPropertyValue(final String aPropertyName, final Object aValue) - throws UnknownPropertyException, PropertyVetoException, com.sun.star.lang.IllegalArgumentException, - WrappedTargetException - { - m_prophlp.setPropertyValue(aPropertyName, aValue); - } - - public Object getPropertyValue(final String aPropertyName) - throws UnknownPropertyException, WrappedTargetException - { - return m_prophlp.getPropertyValue(aPropertyName); - } - - public void addPropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.addPropertyChangeListener(aPropertyName, xListener); - } - - public void removePropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.removePropertyChangeListener(aPropertyName, xListener); - } - - public void addVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.addVetoableChangeListener(aPropertyName, xListener); - } - - public void removeVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); - } - } - - /** - * Gives a factory for creating the service. This method is called by the JavaLoader - *

- * - * @param sImplName the name of the implementation for which a service is desired - * @return returns a XSingleComponentFactory for creating the component - * @see com.sun.star.comp.loader.JavaLoader - */ - public static XSingleComponentFactory __getComponentFactory(final String sImplName) - { - XSingleComponentFactory xFactory = null; - - try - { - if (sImplName.equals(_SOReportJobFactory.class.getName())) - { - xFactory = Factory.createComponentFactory(_SOReportJobFactory.class, _SOReportJobFactory.getServiceNames()); - } - else if (sImplName.equals(SOFunctionManager.class.getName())) - { - xFactory = Factory.createComponentFactory(SOFunctionManager.class, SOFunctionManager.getServiceNames()); - } - else if (sImplName.equals(SOFormulaParser.class.getName())) - { - xFactory = Factory.createComponentFactory(SOFormulaParser.class, SOFormulaParser.getServiceNames()); - } - } - catch (java.lang.IncompatibleClassChangeError e2) - { - } - - return xFactory; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory.java b/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory.java deleted file mode 100644 index 26c4f02caea4..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.lib.uno.helper.PropertySetMixin; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.report.meta.XFunctionDescription; -import com.sun.star.uno.Type; -import com.sun.star.uno.XComponentContext; - -import java.util.Locale; -import java.util.MissingResourceException; - -import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; -import org.pentaho.reporting.libraries.formula.function.FunctionCategory; -import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; - -public final class StarFunctionCategory extends WeakBase - implements com.sun.star.report.meta.XFunctionCategory -{ - - private final XComponentContext m_xContext; - private final PropertySetMixin m_prophlp; - // attributes - private final int m_Number; - private final FunctionCategory category; - private final FunctionRegistry functionRegistry; - private final String functions[]; - private final DefaultFormulaContext defaultContext; - private final Locale defaultLocale; - - public StarFunctionCategory(DefaultFormulaContext defaultContext, final XComponentContext context, final FunctionRegistry functionRegistry, final int _number, final FunctionCategory category) - { - this.defaultContext = defaultContext; - m_xContext = context; - m_Number = _number; - this.category = category; - this.functionRegistry = functionRegistry; - Locale locale; - try - { - category.getDisplayName(defaultContext.getLocalizationContext().getLocale()); - locale = defaultContext.getLocalizationContext().getLocale(); - } - catch (MissingResourceException e) - { - locale = Locale.ENGLISH; - try - { - category.getDisplayName(locale); - } - catch (MissingResourceException e2) - { - } - } - this.defaultLocale = locale; - - functions = functionRegistry.getFunctionNamesByCategory(category); - // use the last parameter of the PropertySetMixin constructor - // for your optional attributes if necessary. See the documentation - // of the PropertySetMixin helper for further information. - // Ensure that your attributes are initialized correctly! - m_prophlp = new PropertySetMixin(m_xContext, this, - new Type(com.sun.star.report.meta.XFunctionCategory.class), null); - } - - // com.sun.star.beans.XPropertySet: - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - return m_prophlp.getPropertySetInfo(); - } - - public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.setPropertyValue(aPropertyName, aValue); - } - - public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - return m_prophlp.getPropertyValue(aPropertyName); - } - - public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addPropertyChangeListener(aPropertyName, xListener); - } - - public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removePropertyChangeListener(aPropertyName, xListener); - } - - public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addVetoableChangeListener(aPropertyName, xListener); - } - - public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); - } - - // com.sun.star.container.XElementAccess: - public com.sun.star.uno.Type getElementType() - { - return new com.sun.star.uno.Type(XFunctionDescription.class); - } - - public boolean hasElements() - { - return functions.length != 0; - } - - // com.sun.star.container.XIndexAccess: - public int getCount() - { - return functions.length; - } - - public Object getByIndex(int Index) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException - { - return getFunction(Index); - } - - // com.sun.star.report.meta.XFunctionCategory: - public int getNumber() - { - return m_Number; - } - - public String getName() - { - try - { - return category.getDisplayName(defaultLocale); - } - catch(Exception ex) - { - } - return "Missing category for number " + m_Number; - } - - public com.sun.star.report.meta.XFunctionDescription getFunction(int position) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException - { - if (position >= functions.length) - { - throw new IndexOutOfBoundsException(); - } - return new StarFunctionDescription(defaultContext, m_xContext, this, functionRegistry.getMetaData(functions[position])); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription.java b/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription.java deleted file mode 100644 index 04b2f256b42a..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.lib.uno.helper.PropertySetMixin; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.report.meta.XFunctionCategory; -import com.sun.star.sheet.FunctionArgument; -import com.sun.star.uno.Type; -import com.sun.star.uno.XComponentContext; - -import java.util.Locale; -import java.util.MissingResourceException; - -import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; -import org.pentaho.reporting.libraries.formula.function.FunctionDescription; - -public final class StarFunctionDescription extends WeakBase - implements com.sun.star.report.meta.XFunctionDescription -{ - - private final XComponentContext m_xContext; - private final PropertySetMixin m_prophlp; - // attributes -// final private com.sun.star.report.meta.XFunctionCategory m_Category; - private final FunctionDescription functionDescription; - private final XFunctionCategory category; - private final Locale defaultLocale; - - public StarFunctionDescription(final DefaultFormulaContext defaultContext, final XComponentContext context, final XFunctionCategory category, final FunctionDescription functionDescription) - { - m_xContext = context; - this.category = category; - Locale locale; - try - { - functionDescription.getDisplayName(defaultContext.getLocalizationContext().getLocale()); - locale = defaultContext.getLocalizationContext().getLocale(); - } - catch (MissingResourceException e) - { - locale = Locale.ENGLISH; - } - this.defaultLocale = locale; - - this.functionDescription = functionDescription; - // use the last parameter of the PropertySetMixin constructor - // for your optional attributes if necessary. See the documentation - // of the PropertySetMixin helper for further information. - // Ensure that your attributes are initialized correctly! - m_prophlp = new PropertySetMixin(m_xContext, this, - new Type(com.sun.star.report.meta.XFunctionDescription.class), null); - } - - // com.sun.star.beans.XPropertySet: - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - return m_prophlp.getPropertySetInfo(); - } - - public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.setPropertyValue(aPropertyName, aValue); - } - - public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - return m_prophlp.getPropertyValue(aPropertyName); - } - - public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addPropertyChangeListener(aPropertyName, xListener); - } - - public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removePropertyChangeListener(aPropertyName, xListener); - } - - public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.addVetoableChangeListener(aPropertyName, xListener); - } - - public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); - } - - // com.sun.star.report.meta.XFunctionDescription: - public com.sun.star.report.meta.XFunctionCategory getCategory() - { - return category; - } - - public String getName() - { - try - { - return functionDescription.getDisplayName(defaultLocale); - } - catch (Exception ex) - { - } - return "Missing function name for " + this.getClass().getName(); - } - - public String getDescription() - { - try - { - return functionDescription.getDescription(defaultLocale); - } - catch (Exception ex) - { - } - return "Missing function description for " + this.getClass().getName(); - } - - public String getSignature() - { - final int count = functionDescription.getParameterCount(); - final StringBuffer signature = new StringBuffer(getName()); - signature.append('('); - for (int i = 0; i < count; i++) - { - signature.append(functionDescription.getParameterDisplayName(i, defaultLocale)); - if (i != (count - 1)) - { - signature.append(';'); - } - } - signature.append(')'); - return signature.toString(); - } - - public com.sun.star.sheet.FunctionArgument[] getArguments() - { - int count = functionDescription.getParameterCount(); - final boolean infinite = functionDescription.isInfiniteParameterCount(); - if (infinite) - { - count = 30; - } - final FunctionArgument[] args = new FunctionArgument[count]; - for (int i = 0; i < args.length; i++) - { - final int pos = infinite ? 0 : i; - args[i] = new FunctionArgument(); - args[i].Description = functionDescription.getParameterDescription(pos, defaultLocale); - args[i].Name = functionDescription.getParameterDisplayName(pos, defaultLocale); - args[i].IsOptional = !functionDescription.isParameterMandatory(pos); - } - return args; - } - - public String createFormula(String[] arguments) throws com.sun.star.lang.DisposedException, com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception - { - final boolean infinite = functionDescription.isInfiniteParameterCount(); - final int count = functionDescription.getParameterCount(); - if (!infinite && arguments.length > count) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - - final StringBuffer formula = new StringBuffer(getName()); - formula.append('('); - for (int i = 0; i < arguments.length; ++i) - { - if (arguments[i].length() == 0) - { - break; - } - formula.append(arguments[i]); - if (i < (arguments.length - 1) && arguments[i + 1].length() != 0) - { - formula.append(';'); - } - } - formula.append(')'); - return formula.toString(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/StarReportData.java b/reportbuilder/java/com/sun/star/report/pentaho/StarReportData.java deleted file mode 100644 index 2f0627a4518d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/StarReportData.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.DataSource; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportData; - -public class StarReportData implements ReportData -{ - - private final DataSource dataSource; - private int currentRow; - private final int rowCount; - - public StarReportData(final DataSource dataSource) - throws com.sun.star.report.DataSourceException - { - if (dataSource == null) - { - throw new NullPointerException(); - } - this.dataSource = dataSource; - this.currentRow = 0; - this.rowCount = dataSource.getRowCount(); - } - - public boolean setCursorPosition(final int row) throws DataSourceException - { - try - { - final boolean ret = dataSource.absolute(row); - if (ret) - { - currentRow = row; - } - return ret; - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to move cursor", e); - } - } - - public void close() - throws DataSourceException - { - try - { - dataSource.close(); - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to close datasource", e); - } - } - - public int getCursorPosition() - throws DataSourceException - { - return currentRow; - } - - /** - * This operation checks, whether a call to next will be likely to succeed. If - * there is a next data row, this should return true. - * - * @return - * @throws org.jfree.report.DataSourceException - * - */ - public boolean isAdvanceable() throws DataSourceException - { - return currentRow < rowCount; - } - - public boolean next() - throws DataSourceException - { - try - { - if (dataSource.next()) - { - currentRow += 1; - return true; - } - return false; - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to move cursor", e); - } - } - - public Object get(final int column) - throws DataSourceException - { - if (!isReadable()) - { - throw new DataSourceException("Failed to query column."); - } - - try - { - return dataSource.getObject(column + 1); - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to query column.", e); - } - } - - public int getColumnCount() - throws DataSourceException - { - try - { - return dataSource.getColumnCount(); - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to query column count.", e); - } - } - - public String getColumnName(final int column) - throws DataSourceException - { - try - { - return dataSource.getColumnName(column + 1); - } - catch (com.sun.star.report.DataSourceException e) - { - throw new DataSourceException("Failed to query column name.", e); - } - } - - public boolean isReadable() throws DataSourceException - { - return currentRow > 0 && rowCount > 0; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory.java deleted file mode 100644 index e1046334f613..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import com.sun.star.report.DataSourceException; -import com.sun.star.report.DataSourceFactory; - -import java.util.HashMap; - -import org.jfree.report.DataSet; -import org.jfree.report.ReportData; -import org.jfree.report.ReportDataFactory; -import org.jfree.report.ReportDataFactoryException; - - -public class StarReportDataFactory implements ReportDataFactory, Cloneable -{ - - private final DataSourceFactory backend; - - public StarReportDataFactory(DataSourceFactory backend) - { - this.backend = backend; - } - - /** - * Queries a datasource. The string 'query' defines the name of the query. The - * Parameterset given here may contain more data than actually needed. - *

- * The dataset may change between two calls, do not assume anything! - * - * @param query - * @param parameters - * @return - */ - public ReportData queryData(final String query, final DataSet parameters) - throws ReportDataFactoryException - { - try - { - final HashMap map = new HashMap(); - final int count = parameters.getColumnCount(); - for (int i = 0; i < count; i++) - { - final Object o = parameters.get(i); - map.put(parameters.getColumnName(i), o); - } - return new StarReportData(backend.queryData(query, map)); - } - catch (DataSourceException dse) - { - String message = dse.getMessage(); - if (message.length() == 0) - { - message = "Failed to create report data wrapper"; - } - throw new ReportDataFactoryException(message, dse); - } - catch (org.jfree.report.DataSourceException e) - { - String message = e.getMessage(); - if (message.length() == 0) - { - message = "Failed to query data"; - } - throw new ReportDataFactoryException(message); - } - } - - public void open() - { - } - - public void close() - { - } - - /** - * Derives a freshly initialized report data factory, which is independend of - * the original data factory. Opening or Closing one data factory must not - * affect the other factories. - * - * @return - */ - public ReportDataFactory derive() - { - try - { - return (ReportDataFactory) clone(); - } - catch (CloneNotSupportedException e) - { - throw new IllegalStateException("Clone failed?"); - } - } - - public Object clone() throws CloneNotSupportedException - { - return super.clone(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/StarReportModule.java b/reportbuilder/java/com/sun/star/report/pentaho/StarReportModule.java deleted file mode 100644 index c0d014a0e1e8..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/StarReportModule.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho; - -import org.pentaho.reporting.libraries.base.boot.AbstractModule; -import org.pentaho.reporting.libraries.base.boot.ModuleInitializeException; -import org.pentaho.reporting.libraries.base.boot.SubSystem; - -public class StarReportModule extends AbstractModule -{ - - public StarReportModule() - throws ModuleInitializeException - { - loadModuleInfo(); - } - - /** - * Initializes the module. Use this method to perform all initial setup operations. This - * method is called only once in a modules lifetime. If the initializing cannot be - * completed, throw a ModuleInitializeException to indicate the error,. The module will - * not be available to the system. - * - * @param subSystem the subSystem. - * @throws org.jfree.base.modules.ModuleInitializeException - * if an error ocurred while initializing the module. - */ - public void initialize(final SubSystem subSystem) - throws ModuleInitializeException - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties b/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties deleted file mode 100644 index 5f75869d4d3d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties +++ /dev/null @@ -1,147 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - - -## -# Do not modify the following lines. They connect this module to the central -# parser registry. -org.pentaho.reporting.libraries.resourceloader.factory.modules.com.sun.star.report.pentaho.model.OfficeDocument.star=com.sun.star.report.pentaho.parser.StarXmlFactoryModule -org.pentaho.reporting.libraries.resourceloader.factory.modules.com.sun.star.report.pentaho.model.OfficeStylesCollection.star=com.sun.star.report.pentaho.parser.StarStyleXmlFactoryModule -org.pentaho.reporting.libraries.resourceloader.factory.modules.com.sun.star.report.pentaho.styles.StyleMapper.star=com.sun.star.report.pentaho.styles.StyleMapperXmlFactoryModule - -## -# The known namespaces. -# -org.jfree.report.namespaces.star-rpt.Uri=http://openoffice.org/2005/report -org.jfree.report.namespaces.star-rpt.Default-Style=res://com/sun/star/report/pentaho/star-rpt.css -org.jfree.report.namespaces.star-rpt.Prefix=rpt -org.jfree.report.namespaces.star-rpt.ClassAttr=style-name - -org.jfree.report.namespaces.star-office.Uri=http://openoffice.org/2004/office -org.jfree.report.namespaces.star-office.Default-Style=res://com/sun/star/report/pentaho/star-office.css -org.jfree.report.namespaces.star-office.Prefix=office -org.jfree.report.namespaces.star-office.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-style.Uri=urn:oasis:names:tc:opendocument:xmlns:style:1.0 -org.jfree.report.namespaces.oasis-style.Default-Style=res://com/sun/star/report/pentaho/oasis-style.css -org.jfree.report.namespaces.oasis-style.Prefix=style - -org.jfree.report.namespaces.oasis-table.Uri=urn:oasis:names:tc:opendocument:xmlns:table:1.0 -org.jfree.report.namespaces.oasis-table.Default-Style=res://com/sun/star/report/pentaho/oasis-table.css -org.jfree.report.namespaces.oasis-table.Prefix=table -org.jfree.report.namespaces.oasis-table.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-draw.Uri=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 -org.jfree.report.namespaces.oasis-draw.Default-Style=res://com/sun/star/report/pentaho/oasis-draw.css -org.jfree.report.namespaces.oasis-draw.Prefix=draw -org.jfree.report.namespaces.oasis-draw.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-chart.Uri=urn:oasis:names:tc:opendocument:xmlns:chart:1.0 -org.jfree.report.namespaces.oasis-chart.Default-Style=res://com/sun/star/report/pentaho/oasis-chart.css -org.jfree.report.namespaces.oasis-chart.Prefix=chart -org.jfree.report.namespaces.oasis-chart.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-text.Uri=urn:oasis:names:tc:opendocument:xmlns:text:1.0 -org.jfree.report.namespaces.oasis-text.Default-Style=res://com/sun/star/report/pentaho/oasis-text.css -org.jfree.report.namespaces.oasis-text.Prefix=text -org.jfree.report.namespaces.oasis-text.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-number.Uri=urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0 -org.jfree.report.namespaces.oasis-number.Default-Style=res://com/sun/star/report/pentaho/oasis-number.css -org.jfree.report.namespaces.oasis-number.Prefix=number -org.jfree.report.namespaces.oasis-number.ClassAttr=style-name - -org.jfree.report.namespaces.oasis-form.Uri=urn:oasis:names:tc:opendocument:xmlns:form:1.0 -org.jfree.report.namespaces.oasis-form.Default-Style=res://com/sun/star/report/pentaho/oasis-form.css -org.jfree.report.namespaces.oasis-form.Prefix=form - -# -# This defines a subset of the real XSL-FO standard. -org.jfree.report.namespaces.oasis-compat-fo.Uri=urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0 -org.jfree.report.namespaces.oasis-compat-fo.Default-Style=res://com/sun/star/report/pentaho/xsl-fo.css -org.jfree.report.namespaces.oasis-compat-fo.Prefix=fo - -# -# This defines a subset of the real XSL-FO standard. -org.jfree.report.namespaces.oasis-compat-svg.Uri=urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0 -org.jfree.report.namespaces.oasis-compat-svg.Default-Style=res://com/sun/star/report/pentaho/svg.css -org.jfree.report.namespaces.oasis-compat-svg.Prefix=svg - -# -# This defines a subset of the real XSL-FO standard. -org.jfree.report.namespaces.oasis-compat-smil.Uri=urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0 -org.jfree.report.namespaces.oasis-compat-smil.Default-Style=res://com/sun/star/report/pentaho/smil.css -org.jfree.report.namespaces.oasis-compat-smil.Prefix=svg - -org.jfree.report.namespaces.xsl-fo.Uri=http://www.w3.org/1999/XSL/Format -org.jfree.report.namespaces.xsl-fo.Default-Style=res://com/sun/star/report/pentaho/xsl-fo.css -org.jfree.report.namespaces.xsl-fo.Prefix=fo - -org.jfree.report.namespaces.svg.Uri=http://www.w3.org/2000/svg -org.jfree.report.namespaces.svg.Default-Style=res://com/sun/star/report/pentaho/svg.css -org.jfree.report.namespaces.svg.Prefix=svg -org.jfree.report.namespaces.svg.ClassAttr=class -org.jfree.report.namespaces.svg.StyleAttr=style - -org.jfree.report.namespaces.xml-xlink.Uri=http://www.w3.org/1999/xlink -#org.jfree.report.namespaces.xml-xlink.Default-Style=res://com/sun/star/report/pentaho/xml-xlink.css -org.jfree.report.namespaces.xml-xlink.Prefix=xlink - -# -# Tag-definition for the XML-writer. -# Prefix is 'com.sun.star.report.pentaho.output.' -# -# Declare the namespaces (this is independent of the ones defined above ..) -# "namespace."= -com.sun.star.report.pentaho.output.namespace.oasis-text=urn:oasis:names:tc:opendocument:xmlns:text:1.0 -com.sun.star.report.pentaho.output.default.oasis-text=deny - -com.sun.star.report.pentaho.output.namespace.oasis-config=urn:oasis:names:tc:opendocument:xmlns:config:1.0 -com.sun.star.report.pentaho.output.default.oasis-config=allow - -# -# Next define the tags for which we want to customize the indent-behaviour -com.sun.star.report.pentaho.output.tag.oasis-text.p=deny -com.sun.star.report.pentaho.output.tag.oasis-text.section=allow -com.sun.star.report.pentaho.output.tag.oasis-text.variable-decls=allow -com.sun.star.report.pentaho.output.tag.oasis-text.variable-decl=allow - -com.sun.star.report.pentaho.output.tag.oasis-config.config-item=deny - -com.sun.star.report.pentaho.output.namespace.oasis-data=urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0 -com.sun.star.report.pentaho.output.default.oasis-data=allow -com.sun.star.report.pentaho.output.tag.oasis-data.text=deny -com.sun.star.report.pentaho.output.tag.oasis-data.currency-symbol=deny -com.sun.star.report.pentaho.output.tag.oasis-data.embedded-text=deny - -com.sun.star.report.pentaho.output.namespace.oasis-draw=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 -com.sun.star.report.pentaho.output.default.oasis-draw=deny - -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.FixedTextElement=com.sun.star.report.pentaho.layoutprocessor.FixedTextLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.FormattedTextElement=com.sun.star.report.pentaho.layoutprocessor.FormattedTextLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.ObjectOleElement=com.sun.star.report.pentaho.layoutprocessor.ObjectOleLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.ImageElement=com.sun.star.report.pentaho.layoutprocessor.ImageElementLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.TableCellElement=com.sun.star.report.pentaho.layoutprocessor.TableCellLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeReport=com.sun.star.report.pentaho.layoutprocessor.OfficeReportLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeGroup=com.sun.star.report.pentaho.layoutprocessor.OfficeGroupLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeGroupSection=com.sun.star.report.pentaho.layoutprocessor.OfficeGroupSectionLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.VariablesDeclarationSection=com.sun.star.report.pentaho.layoutprocessor.VariablesDeclarationLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeDetailSection=com.sun.star.report.pentaho.layoutprocessor.OfficeDetailLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeTableSection=com.sun.star.report.pentaho.layoutprocessor.OfficeTableLayoutController -org.jfree.report.flow.structure.com.sun.star.report.pentaho.model.OfficeGroupInstanceSection=com.sun.star.report.pentaho.layoutprocessor.OfficeGroupInstanceSectionLayoutController diff --git a/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression.java b/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression.java deleted file mode 100644 index d41167a9b91b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.expressions; - -import com.sun.star.report.DataRow; -import com.sun.star.report.ReportExpression; - -public class SumExpression implements ReportExpression -{ - - private Object[] parameters; - - public SumExpression() - { - } - - public Object getParameters() - { - return parameters; - } - - public Object getValue(final DataRow row) - { - - return null; - } - - public void setParameters(final Object[] parameters) - { - this.parameters = parameters; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData.java b/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData.java deleted file mode 100644 index 17297e472976..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.expressions; - -import com.sun.star.report.ReportExpressionMetaData; - -import java.util.Locale; - - -public class SumExpressionMetaData implements ReportExpressionMetaData -{ - - public String getDescription(final Locale l) - { - // todo implement me - return null; - } - - public String getDisplayName(final Locale l) - { - // todo implement me - return null; - } - - public String getName() - { - // todo implement me - return null; - } - - public int getParameterCount() - { - // todo implement me - return 0; - } - - public String getParameterDescription(final int param, final Locale locale) - { - // todo implement me - return null; - } - - public String getParameterDisplayName(final int param, final Locale locale) - { - // todo implement me - return null; - } - - public String getParameterName(final int param) - { - // todo implement me - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java deleted file mode 100644 index 7a7465f99345..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.OfficeGroupSection; -import com.sun.star.report.pentaho.model.ReportElement; - -import org.jfree.report.DataFlags; -import org.jfree.report.DataRow; -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.expressions.Expression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.AbstractLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Group; - -import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; - -/** - * Todo: Document me! - * - * @since 05.03.2007 - * @noinspection CloneableClassWithoutClone - */ -public abstract class AbstractReportElementLayoutController - extends AbstractLayoutController -{ - - public static final int NOT_STARTED = 0; - public static final int FINISHED = 2; - private int state; - - protected AbstractReportElementLayoutController() - { - } - - /** - * Advances the processing position. - * - * @param target the report target that receives generated events. - * @return the new layout controller instance representing the new state. - * - * @throws org.jfree.report.DataSourceException if there was a problem reading data from - * the datasource. - * @throws org.jfree.report.ReportProcessingException if there was a general problem during - * the report processing. - * @throws org.jfree.report.ReportDataFactoryException if a query failed. - */ - public LayoutController advance(final ReportTarget target) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - if (state != AbstractReportElementLayoutController.NOT_STARTED) - { - throw new IllegalStateException(); - } - - if (FormatValueUtility.shouldPrint(this, (ReportElement)getNode())) - { - // delegate to the handler .. - return delegateContentGeneration(target); - } - else - { - // There is no printable content at all. Set the state to FINISHED - return join(getFlowController()); - } - } - - public abstract boolean isValueChanged(); - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - final AbstractReportElementLayoutController alc = - (AbstractReportElementLayoutController) clone(); - alc.state = AbstractReportElementLayoutController.FINISHED; - return alc; - // That's how this method is implemented in classes of pentaho itself; - // I'm not sure why we do something different, but I haven't been able - // to pinpoint a bug attributable to the above implementation. - // final LayoutController parent = getParent(); - // if (parent == null) - // { - // // skip to the next step .. - // throw new IllegalStateException("There is no parent to join with. " + - // "This should not happen in a sane environment!"); - // } - - // return parent.join(getFlowController()); - } - - protected abstract LayoutController delegateContentGeneration(final ReportTarget target) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException; - - /** - * Checks, whether the layout controller would be advanceable. If this method - * returns true, it is generally safe to call the 'advance()' method. - * - * @return true, if the layout controller is advanceable, false otherwise. - */ - public boolean isAdvanceable() - { - return state != AbstractReportElementLayoutController.FINISHED; - } - - public int getState() - { - return state; - } - - protected void setState(final int state) - { - this.state = state; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController.java deleted file mode 100644 index 2dd554e0543e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.FixedTextElement; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.data.GlobalMasterRow; -import org.jfree.report.data.ReportDataRow; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportContext; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; -import org.jfree.report.structure.Section; - -/** - * Processes a fixed-text element of the OpenOffice reporting specifciation. - * The element itself contains a single paragraph which contains the content. - * After checking, whether this element should be printed, this layout - * controller simply delegates the dirty work to a suitable handler. - * - * @noinspection CloneableClassWithoutClone - * @since 05.03.2007 - */ -public class FixedTextLayoutController - extends AbstractReportElementLayoutController -{ - - public FixedTextLayoutController() - { - } - - public boolean isValueChanged() - { - final FlowController controller = getFlowController(); - final GlobalMasterRow masterRow = controller.getMasterRow(); - final ReportDataRow reportDataRow = masterRow.getReportDataRow(); - return reportDataRow.getCursor() == 0; - } - - protected LayoutController delegateContentGeneration(final ReportTarget target) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException - { - final FixedTextElement fte = (FixedTextElement) getNode(); - final Section content = fte.getContent(); - - final FlowController flowController = getFlowController(); - final ReportContext reportContext = flowController.getReportContext(); - final LayoutControllerFactory layoutControllerFactory = - reportContext.getLayoutControllerFactory(); - - final FixedTextLayoutController flc = (FixedTextLayoutController) clone(); - flc.setState(AbstractReportElementLayoutController.FINISHED); - return layoutControllerFactory.create(flowController, content, flc); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility.java deleted file mode 100644 index 99ff3e5fcf27..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility.java +++ /dev/null @@ -1,363 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormattedTextElement; -import com.sun.star.report.pentaho.model.OfficeGroupSection; -import com.sun.star.report.pentaho.model.ReportElement; -import java.math.BigDecimal; - -import java.sql.Time; - -import java.text.SimpleDateFormat; - -import java.util.Date; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataRow; -import org.jfree.report.DataSourceException; -import org.jfree.report.data.DefaultDataFlags; -import org.jfree.report.expressions.Expression; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Group; - -import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; -import org.pentaho.reporting.libraries.formula.util.HSSFDateUtil; - -/** - * Creation-Date: 06.06.2007, 17:03:30 - * - */ -public class FormatValueUtility -{ - - private static final String BOOLEAN_VALUE = "boolean-value"; - private static final String STRING_VALUE = "string-value"; - public static final String VALUE_TYPE = "value-type"; - public static final String VALUE = "value"; - private static SimpleDateFormat dateFormat; - private static SimpleDateFormat timeFormat; - - private FormatValueUtility() - { - } - - public static String applyValueForVariable(final Object value, final AttributeMap variableSection) - { - String ret = null; - if (value instanceof Time) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "time"); - ret = formatTime((Time) value); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", ret); - } - else if (value instanceof java.sql.Date) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date"); - ret = formatDate((Date) value); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", ret); - } - else if (value instanceof Date) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); - ret = HSSFDateUtil.getExcelDate((Date) value, false, 2).toString(); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, ret); - } - else if (value instanceof Number) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); - } - else if (value instanceof Boolean) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "boolean"); - if (Boolean.TRUE.equals(value)) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE); - } - } - else if (value != null) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, String.valueOf(value)); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, ""); - } - return ret; - } - - public static void applyValueForCell(final Object value, final AttributeMap variableSection, final String valueType) - { - if (value instanceof Time) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", formatTime((Time) value)); - } - else if (value instanceof java.sql.Date) - { - if ("float".equals(valueType))//@see http://qa.openoffice.org/issues/show_bug.cgi?id=108954 - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 2).toString()); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value)); - } - } - else if (value instanceof Date) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 2).toString()); - } - else if (value instanceof BigDecimal) - { - if ("date".equals(valueType)) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate(HSSFDateUtil.getJavaDate((BigDecimal) value, false, 0))); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); - } - } - else if (value instanceof Number) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); - } - else if (value instanceof Boolean) - { - if ("float".equals(valueType)) - { - float fvalue = Boolean.TRUE.equals(value) ? 1 : 0; - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(fvalue)); - } - else - { - if (Boolean.TRUE.equals(value)) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE); - } - } - } - else if (value != null) - { - try - { - final Float number = Float.valueOf(String.valueOf(value)); - applyValueForCell(number, variableSection, valueType); - return; - } - catch (NumberFormatException e) - { - } - if (!"string".equals(valueType)) - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); - } - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, String.valueOf(value)); - } - else - { - variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, ""); - } - } - - private static synchronized String formatDate(final Date date) - { - if (dateFormat == null) - { - dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'S'Z'"); - } - return dateFormat.format(date); - } - - private static synchronized String formatTime(final Date date) - { - if (timeFormat == null) - { - timeFormat = new SimpleDateFormat("'PT'HH'H'mm'M'ss'S'"); - } - return timeFormat.format(date); - } - - public static DataFlags computeDataFlag(final FormattedTextElement element, - final FlowController flowController) - throws DataSourceException - { - // here it is relatively easy. We have to evaluate the expression, convert - // the result into a string, and print that string. - final FormulaExpression formulaExpression = element.getValueExpression(); - final Object result = LayoutControllerUtil.evaluateExpression(flowController, element, formulaExpression); - if (result == null) - { - // ignore it. Ignoring it is much better than printing 'null'. - // LOGGER.debug("Formula '" + formulaExpression.getFormula() + "' evaluated to null."); - return null; - } - else if (result instanceof DataFlags) - { - return (DataFlags) result; - } - else - { - return new DefaultDataFlags(null, result, true); - } - } - - public static boolean shouldPrint(final LayoutController ref, final ReportElement text) - throws DataSourceException - { - final boolean isValueChanged; - if (ref instanceof AbstractReportElementLayoutController) - isValueChanged=((AbstractReportElementLayoutController)ref).isValueChanged(); - else if (ref instanceof TableCellLayoutController) - isValueChanged=((TableCellLayoutController)ref).isValueChanged(); - else - throw new AssertionError("com.sun.star.report.pentaho.layoutprocessor.FormatValueUtility.shouldPrint expects an implementor of isValueChanged as first argument"); - - // Tests we have to perform: - // 1. If repeated values are supposed to be printed, then print. - // (this is always the case for static text and static elements) - // 2. If value changed, then print. - // 3. If (printing should be forced on group change AND group changed), then print - if ( !( isValueChanged - || text.isPrintRepeatedValues() - || ( text.isPrintWhenGroupChange() && isGroupChanged(ref) ))) - { - return false; - } - - final Expression dc = text.getDisplayCondition(); - if (dc != null) - { - final Object o = LayoutControllerUtil.evaluateExpression(ref.getFlowController(), text, dc); - if (Boolean.FALSE.equals(o)) - { - return false; - } - } - - return true; - } - - public static boolean isGroupChanged(LayoutController ref) - { - // search the group. - final SectionLayoutController slc = findGroup(ref); - if (slc == null) - { - // Always print the content of the report header and footer and - // the page header and footer. - return true; - } - - // we are in the first iteration, so yes, the group has changed recently. - return slc.getIterationCount() == 0; - } - - public static SectionLayoutController findGroup(LayoutController ref) - { - LayoutController parent = ref.getParent(); - boolean skipNext = false; - while (parent != null) - { - if (!(parent instanceof SectionLayoutController)) - { - parent = parent.getParent(); - } - else - { - final SectionLayoutController slc = (SectionLayoutController) parent; - final Element element = slc.getElement(); - if (element instanceof OfficeGroupSection) - { - // This is a header or footer. So we take the next group instead. - skipNext = true; - parent = parent.getParent(); - } - else if (!(element instanceof Group)) - { - parent = parent.getParent(); - } - else if (skipNext) - { - skipNext = false; - parent = parent.getParent(); - } - else - { - return (SectionLayoutController) parent; - } - } - } - return null; - } - - public static boolean isReferenceChanged(LayoutController ref, final LValue lValue) - { - if (lValue instanceof ContextLookup) - { - final ContextLookup rval = (ContextLookup) lValue; - final String s = rval.getName(); - final DataRow view = ref.getFlowController().getMasterRow().getGlobalView(); - try - { - final DataFlags flags = view.getFlags(s); - if (flags != null && flags.isChanged()) - { - return true; - } - } - catch (DataSourceException e) - { - // ignore .. assume that the reference has not changed. - } - } - final LValue[] childValues = lValue.getChildValues(); - for (int i = 0; i < childValues.length; i++) - { - final LValue value = childValues[i]; - if (isReferenceChanged(ref, value)) - { - return true; - } - } - return false; - } - -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController.java deleted file mode 100644 index ea3d22bc169c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormattedTextElement; -import com.sun.star.report.pentaho.model.OfficeDocument; -import com.sun.star.report.pentaho.model.OfficeStyle; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.formula.Formula; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; -import org.pentaho.reporting.libraries.formula.parser.ParseException; - -/** - * Todo: Document me! - * - * @since 05.03.2007 - */ -public class FormattedTextLayoutController - extends AbstractReportElementLayoutController -{ - - private static final Log LOGGER = LogFactory.getLog(FormattedTextLayoutController.class); - - public FormattedTextLayoutController() - { - } - - private VariablesCollection getVariablesCollection() - { - LayoutController parent = getParent(); - while (parent != null) - { - if (parent instanceof OfficeRepeatingStructureLayoutController) - { - final OfficeRepeatingStructureLayoutController orslc = - (OfficeRepeatingStructureLayoutController) parent; - if (orslc.isNormalFlowProcessing()) - { - return null; - } - - return orslc.getVariablesCollection(); - } - parent = parent.getParent(); - } - return null; - } - - public boolean isValueChanged() - { - try - { - final FormattedTextElement element = (FormattedTextElement) getNode(); - final FormulaExpression formulaExpression = element.getValueExpression(); - final Formula formula = formulaExpression.getCompiledFormula(); - final LValue lValue = formula.getRootReference(); - return FormatValueUtility.isReferenceChanged(this, lValue); - } - catch (final ParseException e) - { - LOGGER.debug("Parse Exception", e); - return false; - } - } - - protected LayoutController delegateContentGeneration(final ReportTarget target) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException - { - final FormattedTextElement element = (FormattedTextElement) getNode(); - final VariablesCollection vc = getVariablesCollection(); - if (vc != null) - { - final String name = vc.addVariable(element); - final AttributeMap variablesGet = new AttributeMap(); - variablesGet.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, - Element.TYPE_ATTRIBUTE, "variable-get"); - variablesGet.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, - Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TEXT_NS); - variablesGet.setAttribute(OfficeNamespaces.TEXT_NS, "name", name); - - final String dataStyleName = computeValueStyle(); - if (dataStyleName != null) - { - variablesGet.setAttribute(OfficeNamespaces.STYLE_NS, "data-style-name", dataStyleName); - } - - final String valueType = computeValueType(); - variablesGet.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, valueType); - target.startElement(variablesGet); - - target.endElement(variablesGet); - } - else - { - final DataFlags df = FormatValueUtility.computeDataFlag(element, getFlowController()); - if (df != null) - { - if (df.getValue() instanceof String) - { - target.processContent(df); - } - else //@see http://qa.openoffice.org/issues/show_bug.cgi?id=108954 - { - Element cell = getParentTableCell(); - if (cell != null && "string".equals(cell.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE))) - { - target.processContent(df); - } - } - } - } - - return join(getFlowController()); - } - - private OfficeDocument getDocument() - { - LayoutController parent = getParent(); - while (parent != null) - { - final Object node = parent.getNode(); - if (node instanceof OfficeDocument) - { - return (OfficeDocument) node; - } - parent = parent.getParent(); - } - return null; - } - - private Element getParentTableCell() - { - LayoutController parent = getParent(); - while (parent != null) - { - if (parent instanceof TableCellLayoutController) - { - final TableCellLayoutController cellController = (TableCellLayoutController) parent; - return cellController.getElement(); - } - parent = parent.getParent(); - } - return null; - } - - private String computeValueStyle() - { - final Element tce = getParentTableCell(); - if (tce == null) - { - return null; - } - - final String cellStyleName = (String) tce.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - if (cellStyleName == null) - { - return null; - } - final OfficeDocument document = getDocument(); - if (document == null) - { - return null; - } - - final OfficeStyle style = document.getStylesCollection().getStyle("table-cell", cellStyleName); - return (String) style.getAttribute(OfficeNamespaces.STYLE_NS, "data-style-name"); - } - - private String computeValueType() - { - final Element tce = getParentTableCell(); - if (tce == null) - { - // NO particular format means: Fallback to string and hope and pray .. - throw new IllegalStateException("A formatted text element must be a child of a Table-Cell."); - } - - final String type = (String) tce.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); - if (type == null) - { - LOGGER.error("The Table-Cell does not have a office:value attribute defined. Your content will be messed up."); - return "string"; - } - return type; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext.java deleted file mode 100644 index 03c062487471..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -/** - * Todo: Document me! - * - * @since 30.03.2007 - */ -public class ImageElementContext -{ - - private final int colSpan; - private final int rowSpan; - private String[] rowStyles; - private String[] colStyles; - - public ImageElementContext(final int colSpan, final int rowSpan) - { - this.colSpan = colSpan; - this.rowSpan = rowSpan; - this.colStyles = new String[colSpan]; - this.rowStyles = new String[rowSpan]; - } - - public int getColSpan() - { - return colSpan; - } - - public int getRowSpan() - { - return rowSpan; - } - - public String[] getRowStyles() - { - return rowStyles; - } - - public String[] getColStyles() - { - return colStyles; - } - - public void setRowStyle(final int pos, final String styleName) - { - rowStyles[pos] = styleName; - } - - public void setColStyle(final int pos, final String styleName) - { - colStyles[pos] = styleName; - } - - public String getRowStyle(final int pos) - { - return rowStyles[pos]; - } - - public String getColStyle(final int pos) - { - return colStyles[pos]; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController.java deleted file mode 100644 index a32073e13224..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ImageElement; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.data.GlobalMasterRow; -import org.jfree.report.data.ReportDataRow; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; -import org.jfree.report.util.TextUtilities; - -import org.pentaho.reporting.libraries.base.util.ObjectUtilities; -import org.pentaho.reporting.libraries.formula.Formula; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; -import org.pentaho.reporting.libraries.formula.parser.ParseException; - -/** - * Produces an image. The image-structures itself (draw:frame and so on) are not generated here. This element produces a - * place-holder element and relies on the output target to compute a sensible position for the element. The report - * definition does not give any hints about the size of the image, so we have to derive this from the surrounding - * context. - * - * @since 05.03.2007 - */ -public class ImageElementLayoutController - extends AbstractReportElementLayoutController -{ - - private static final Log LOGGER = LogFactory.getLog(ImageElementLayoutController.class); - private ImageElementContext context; - - public ImageElementLayoutController() - { - } - - protected LayoutController delegateContentGeneration(final ReportTarget target) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException - { - final ImageElement imageElement = (ImageElement) getNode(); - final FormulaExpression formulaExpression = imageElement.getFormula(); - if (formulaExpression == null) - { - // A static image is easy. At least at this level. Dont ask about the weird things we have to do in the - // output targets ... - final String linkTarget = imageElement.getImageData(); - generateImage(target, linkTarget, imageElement.getScaleMode(), imageElement.isPreserveIRI()); - } - else - { - final Object value = - LayoutControllerUtil.evaluateExpression(getFlowController(), imageElement, formulaExpression); - generateImage(target, value, imageElement.getScaleMode(), imageElement.isPreserveIRI()); - } - return join(getFlowController()); - } - - private void generateImage(final ReportTarget target, - final Object linkTarget, - final String scale, - final boolean preserveIri) - throws ReportProcessingException, DataSourceException - { - if (linkTarget == null) - { - return; - } - - final AttributeMap image = new AttributeMap(); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, JFreeReportInfo.REPORT_NAMESPACE); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.IMAGE); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.SCALE, scale); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.PRESERVE_IRI, String.valueOf(preserveIri)); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "image-context", createContext()); - image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.IMAGE_DATA, linkTarget); - target.startElement(image); - target.endElement(image); - } - - protected ImageElementContext createContext() - { - if (context == null) - { - - // Step 1: Find the parent cell. - final LayoutController cellController = findParentCell(); - if (cellController == null) - { - LOGGER.warn("Image is not contained in a table. Unable to calculate the image-size."); - return null; - } - final Element tableCell = (Element) cellController.getNode(); - final int rowSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-rows-spanned"), 1); - final int colSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-columns-spanned"), 1); - if (rowSpan < 1 || colSpan < 1) - { - LOGGER.warn("Rowspan or colspan for image-size calculation was invalid."); - return null; - } - - final LayoutController rowController = cellController.getParent(); - if (rowController == null) - { - LOGGER.warn("Table-Cell has no parent. Unable to calculate the image-size."); - return null; - } - final Section tableRow = (Section) rowController.getNode(); - // we are now making the assumption, that the row is a section, that contains the table-cell. - // This breaks the ability to return nodes or to construct reports on the fly, but the OO-report format - // is weird anyway and wont support such advanced techniques for the next few centuries .. - final int columnPos = findNodeInSection(tableRow, tableCell, OfficeToken.COVERED_TABLE_CELL); - if (columnPos == -1) - { - LOGGER.warn("Table-Cell is not a direct child of the table-row. Unable to calculate the image-size."); - return null; - } - - final LayoutController tableController = rowController.getParent(); - if (tableController == null) - { - LOGGER.warn("Table-Row has no Table. Unable to calculate the image-size."); - return null; - } - - final Section table = (Section) tableController.getNode(); - // ok, we got a table, so as next we have to search for the columns now. - final Section columns = (Section) table.findFirstChild(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS); - if (columns.getNodeCount() <= columnPos + colSpan) - { - // the colspan is to large. The table definition is therefore invalid. We do not try to fix this. - LOGGER.warn( - "The Table's defined columns do not match the col-span or col-position. Unable to calculate the image-size."); - return null; - } - - final ImageElementContext context = new ImageElementContext(colSpan, rowSpan); - addColumnStyles(context, columns, columnPos, colSpan); - // finally search the styles for the row now. - final int rowPos = findNodeInSection(table, tableRow, null); - if (rowPos == -1) - { - LOGGER.warn("Table-Cell is not a direct child of the table-row. Unable to calculate the image-size."); - return null; - } - - addRowStyles(context, table, rowPos, rowSpan); - this.context = context; - } - return this.context; - } - - private int findNodeInSection(final Section tableRow, - final Element tableCell, - final String secondType) - { - int retval = 0; - final Node[] nodes = tableRow.getNodeArray(); - final String namespace = tableCell.getNamespace(); - final String type = tableCell.getType(); - for (final Node node : nodes) - { - if (!(node instanceof Element)) - { - continue; - } - final Element child = (Element) node; - if (!ObjectUtilities.equal(child.getNamespace(), namespace) || (!ObjectUtilities.equal(child.getType(), type) && (secondType == null || !ObjectUtilities.equal(child.getType(), secondType)))) - { - continue; - } - - if (node == tableCell) - { - return retval; - } - retval += 1; - } - return -1; - } - - private LayoutController findParentCell() - { - LayoutController parent = getParent(); - while (parent != null) - { - final Object node = parent.getNode(); - if (node instanceof Element) - { - final Element element = (Element) node; - if (OfficeNamespaces.TABLE_NS.equals(element.getNamespace()) && "table-cell".equals(element.getType())) - { - return parent; - } - } - parent = parent.getParent(); - } - return null; - } - - public boolean isValueChanged() - { - final ImageElement imageElement = (ImageElement) getNode(); - final FormulaExpression formulaExpression = imageElement.getFormula(); - if (formulaExpression == null) - { - final FlowController controller = getFlowController(); - final GlobalMasterRow masterRow = controller.getMasterRow(); - final ReportDataRow reportDataRow = masterRow.getReportDataRow(); - return reportDataRow.getCursor() == 0; - } - - try - { - final Formula formula = formulaExpression.getCompiledFormula(); - final LValue lValue = formula.getRootReference(); - return FormatValueUtility.isReferenceChanged(this, lValue); - } - catch (ParseException e) - { - return false; - } - } - - void addColumnStyles(final ImageElementContext context, final Section columns, final int columnPos, final int colSpan) - { - final Node[] columnDefs = columns.getNodeArray(); - int columnCounter = 0; - for (Node columnDef : columnDefs) - { - final Element column = (Element) columnDef; - - if (!ObjectUtilities.equal(column.getNamespace(), OfficeNamespaces.TABLE_NS) || !ObjectUtilities.equal(column.getType(), OfficeToken.TABLE_COLUMN)) - { - continue; - } - if (columnCounter >= columnPos) - { - final String colStyle = (String) column.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - context.setColStyle(columnCounter - columnPos, colStyle); - } - - columnCounter += 1; - - if (columnCounter >= (columnPos + colSpan)) - { - break; - } - - } - } - - void addRowStyles(final ImageElementContext context, final Section table, final int rowPos, final int rowSpan) - { - final Node[] rows = table.getNodeArray(); - int rowCounter = 0; - for (Node row1 : rows) - { - final Element row = (Element) row1; - - if (!ObjectUtilities.equal(row.getNamespace(), OfficeNamespaces.TABLE_NS) || !ObjectUtilities.equal(row.getType(), OfficeToken.TABLE_ROW)) - { - continue; - } - if (rowCounter >= rowPos) - { - final String rowStyle = (String) row.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - context.setRowStyle(rowCounter - rowPos, rowStyle); - } - - rowCounter += 1; - - if (rowCounter >= (rowPos + rowSpan)) - { - break; - } - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController.java deleted file mode 100644 index 4dbac0fae730..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.SDBCReportDataFactory; -import com.sun.star.report.pentaho.model.ObjectOleElement; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataRow; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.structure.Element; - -public class ObjectOleLayoutController extends AbstractReportElementLayoutController -{ - - public ObjectOleLayoutController() - { - } - - public boolean isValueChanged() - { - final ObjectOleElement element = (ObjectOleElement) getNode(); - final List masterfields = element.getMasterfields(); - final DataRow view = getFlowController().getMasterRow().getGlobalView(); - for (final Iterator iter = masterfields.iterator(); iter.hasNext();) - { - final String master = (String) iter.next(); - try - { - final DataFlags flags = view.getFlags(master); - if (flags != null && flags.isChanged()) - { - return true; - } - } - catch (DataSourceException e) - { - // ignore .. assume that the reference has not changed. - } - } - return false; - } - - protected LayoutController delegateContentGeneration(final ReportTarget target) throws ReportProcessingException, ReportDataFactoryException, DataSourceException - { - final ObjectOleElement element = (ObjectOleElement) getNode(); - final String url = element.getUrl(); - if (url != null) - { - final AttributeMap ole = new AttributeMap(); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, JFreeReportInfo.REPORT_NAMESPACE); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.OBJECT_OLE); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "href", url); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "class-id", element.getClassid()); - final List masterfields = element.getMasterfields(); - final List values = new ArrayList(); - final DataRow view = getFlowController().getMasterRow().getGlobalView(); - for (final Iterator iter = masterfields.iterator(); iter.hasNext();) - { - final String master = iter.next(); - try - { - final DataFlags flags = view.getFlags(master); - if (flags != null) - { - values.add(flags.getValue()); - } - } - catch (DataSourceException e) - { - // ignore .. assume that the reference has not changed. - } - } - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_COLUMNS, masterfields); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_VALUES, values); - ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.DETAIL_COLUMNS, element.getDetailfields()); - - target.startElement(ole); - target.endElement(ole); - } - - return join(getFlowController()); - } -} - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java deleted file mode 100644 index ad314e5ae31d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.VariablesDeclarationSection; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportData; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.data.GlobalMasterRow; -import org.jfree.report.data.ReportDataRow; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.ElementLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; - -/** - * Creation-Date: 11.04.2007, 11:04:02 - * - */ -public class OfficeDetailLayoutController extends SectionLayoutController -{ - - public static final int STATE_PROCESS_VARIABLES = 2; - public static final int STATE_PROCESS_NORMAL_FLOW = 3; - private boolean waitForJoin; - private int state; - - public OfficeDetailLayoutController() - { - } - - /** - * Initializes the layout controller. This method is called exactly once. It - * is the creators responsibility to call this method. - *

- * Calling initialize after the first advance must result in a - * IllegalStateException. - * - * @param node the currently processed object or layout node. - * @param flowController the current flow controller. - * @param parent the parent layout controller that was responsible for - * instantiating this controller. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public void initialize(final Object node, - final FlowController flowController, - final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - super.initialize(node, flowController, parent); - state = OfficeDetailLayoutController.STATE_PROCESS_VARIABLES; - } - - /** - * This method is called for each newly instantiated layout controller. The returned layout controller instance should - * have a processing state of either 'OPEN' or 'FINISHING' depending on whether there is any content or any child - * nodes to process. - * - * @param target the report target that receives generated events. - * @return the new layout controller instance representing the new state. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - protected LayoutController startElement(final ReportTarget target) - throws DataSourceException, ReportProcessingException, ReportDataFactoryException - { - final FlowController fc = getFlowController(); - final GlobalMasterRow masterRow = fc.getMasterRow(); - final ReportDataRow reportDataRow = masterRow.getReportDataRow(); - final ReportData reportData = reportDataRow.getReportData(); - if (!reportData.isReadable()) - { - reportData.isReadable(); - // If this report has no data, then do not print the detail section. The detail section - // is the only section that behaves this way, and for now this is only done in the OO-implementation - final SectionLayoutController derived = (SectionLayoutController) clone(); - derived.setProcessingState(ElementLayoutController.FINISHED); - derived.setFlowController(fc); - return derived; - } - - if (state == OfficeDetailLayoutController.STATE_PROCESS_VARIABLES) - { - final VariablesDeclarationSection variables = new VariablesDeclarationSection(); - final OfficeDetailLayoutController controller = (OfficeDetailLayoutController) clone(); - controller.state = OfficeDetailLayoutController.STATE_PROCESS_NORMAL_FLOW; - controller.waitForJoin = true; - return processChild(controller, variables, fc); - } - - return super.startElement(target); - } - - protected void resetSectionForRepeat() - { - super.resetSectionForRepeat(); - state = STATE_PROCESS_VARIABLES; - } - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - { - if (waitForJoin) - { - final OfficeDetailLayoutController derived = (OfficeDetailLayoutController) clone(); - derived.setProcessingState(ElementLayoutController.NOT_STARTED); - derived.setFlowController(flowController); - derived.waitForJoin = false; - return derived; - } - return super.join(flowController); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java deleted file mode 100644 index dc443aba23d4..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.OfficeGroupSection; -import com.sun.star.report.pentaho.model.VariablesDeclarationSection; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.expressions.Expression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportContext; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.ElementLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; - -/** - * Creation-Date: 25.07.2007, 14:50:45 - * - */ -public class OfficeGroupInstanceSectionLayoutController extends SectionLayoutController -{ - - public static final int STATE_PROCESS_VARIABLES = 2; - public static final int STATE_PROCESS_NORMAL_FLOW = 3; - private int state; - private boolean waitForJoin; - - public OfficeGroupInstanceSectionLayoutController() - { - } - - public void initialize(final Object node, final FlowController flowController, final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, ReportProcessingException - { - super.initialize(node, flowController, parent); - state = STATE_PROCESS_VARIABLES; - } - - protected LayoutController processContent(final ReportTarget target) - throws DataSourceException, ReportProcessingException, ReportDataFactoryException - { - if (state == OfficeGroupInstanceSectionLayoutController.STATE_PROCESS_VARIABLES) - { - // todo: Fill the variables section with something sensible .. - final VariablesDeclarationSection variables = new VariablesDeclarationSection(); - final OfficeGroupInstanceSectionLayoutController controller = - (OfficeGroupInstanceSectionLayoutController) clone(); - controller.state = - OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; - controller.waitForJoin = true; - return processChild(controller, variables, getFlowController()); - } - return super.processContent(target); - } - - // isDisplayable is private in version 0.9.1, so until the upgrade we keep this copy of the method - // todo: Delete it unce the sun-cvs contains version 0.9.2. - protected LayoutController processChild(final SectionLayoutController derived, - final Node node, - final FlowController flowController) - throws DataSourceException, ReportProcessingException, - ReportDataFactoryException - { - final ReportContext reportContext = flowController.getReportContext(); - final LayoutControllerFactory layoutControllerFactory = reportContext.getLayoutControllerFactory(); - if (isDisplayable(node)) - { - derived.setProcessingState(ElementLayoutController.WAITING_FOR_JOIN); - return layoutControllerFactory.create(flowController, node, derived); - } - else - { - derived.setProcessingState(ElementLayoutController.WAITING_FOR_JOIN); - final LayoutController childLc = layoutControllerFactory.create(flowController, node, derived); - return LayoutControllerUtil.skipInvisibleElement(childLc); - } - } - - protected boolean isDisplayable(final Node node) throws DataSourceException - { - if (!(node instanceof OfficeGroupSection)) - { - return _isDisplayable(node); - } - - final OfficeGroupSection section = (OfficeGroupSection) node; - return !section.isRepeatSection() && _isDisplayable(node); - } - - protected boolean _isDisplayable(final Node node) - throws DataSourceException - { - // temp method until the pending upgrade to 0.9.2. Later we just call super.isDisplayable(..) instead. - if (!node.isEnabled()) - { - return false; - } - - final Expression expression = node.getDisplayCondition(); - if (expression == null) - { - return true; - } - - final Object result = LayoutControllerUtil.evaluateExpression(getFlowController(), node, expression); - return Boolean.TRUE.equals(result); - } - - protected void resetSectionForRepeat() - { - super.resetSectionForRepeat(); - state = STATE_PROCESS_VARIABLES; - } - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - { - if (waitForJoin) - { - final OfficeGroupInstanceSectionLayoutController derived = (OfficeGroupInstanceSectionLayoutController) clone(); - derived.setProcessingState(ElementLayoutController.OPENED); - derived.setFlowController(flowController); - derived.waitForJoin = false; - return derived; - } - return super.join(flowController); - } - - protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) - throws DataSourceException - { - final AttributeMap map = new AttributeMap(super.computeAttributes(fc, element, target)); - map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "iteration-count", getIterationCount()); - map.makeReadOnly(); - return map; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java deleted file mode 100644 index 91bea4b1179a..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.OfficeGroup; -import com.sun.star.report.pentaho.model.OfficeGroupSection; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.ElementLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; - -/** - * Todo: Document me! - * - * @since 15.03.2007 - */ -public class OfficeGroupLayoutController extends SectionLayoutController - implements OfficeRepeatingStructureLayoutController -{ - - public static final int STATE_PROCESS_REPEATING_HEADER = 0; - public static final int STATE_PROCESS_REPEATING_FOOTER = 1; - public static final int STATE_PROCESS_NORMAL_FLOW = 3; - private boolean waitForJoin; - private int state; - private VariablesCollection variablesCollection; - private boolean repeatHeader; - private boolean repeatFooter; - - public OfficeGroupLayoutController() - { - } - - /** - * Initializes the layout controller. This method is called exactly once. It - * is the creators responsibility to call this method. - *

- * Calling initialize after the first advance must result in a - * IllegalStateException. - * - * @param node the currently processed object or layout node. - * @param flowController the current flow controller. - * @param parent the parent layout controller that was responsible for - * instantiating this controller. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public void initialize(final Object node, - final FlowController flowController, - final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - super.initialize(node, flowController, parent); - state = OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER; - variablesCollection = new VariablesCollection(computeVariablesPrefix()); - - - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection header = group.getHeader(); - repeatHeader = (header != null && header.isRepeatSection()); - - final OfficeGroupSection footer = group.getFooter(); - repeatFooter = (footer != null && footer.isRepeatSection()); - } - - protected LayoutController processContent(final ReportTarget target) - throws DataSourceException, ReportProcessingException, - ReportDataFactoryException - { - if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER) - { - - final OfficeGroupLayoutController controller = - (OfficeGroupLayoutController) clone(); - controller.state = - OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER; - - if (!repeatHeader) - { - return controller; - } - - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection header = group.getHeader(); - controller.waitForJoin = true; - return processChild(controller, header, getFlowController()); - } - - if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER) - { - - final OfficeGroupLayoutController controller = - (OfficeGroupLayoutController) clone(); - controller.state = OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; - - if (!repeatFooter) - { - return controller; - } - - final OfficeGroup group = (OfficeGroup) getElement(); - final OfficeGroupSection footer = group.getFooter(); - controller.waitForJoin = true; - return processChild(controller, footer, getFlowController()); - } - - return super.processContent(target); - } - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - { - if (waitForJoin) - { - final OfficeGroupLayoutController derived = (OfficeGroupLayoutController) clone(); - derived.setProcessingState(ElementLayoutController.OPENED); - derived.setFlowController(flowController); - derived.waitForJoin = false; - return derived; - } - return super.join(flowController); - } - - public boolean isNormalFlowProcessing() - { - return state == OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; - } - - private String computeVariablesPrefix() - { - int count = 0; - LayoutController lc = this; - while (lc != null) - { - if (lc instanceof OfficeGroupLayoutController) - { - count++; - } - lc = lc.getParent(); - } - return "auto_group_" + count + "_"; - } - - public VariablesCollection getVariablesCollection() - { - return variablesCollection; - } - - protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) - throws DataSourceException - { - final AttributeMap map = new AttributeMap(super.computeAttributes(fc, element, target)); - final String value = String.valueOf(repeatHeader || repeatFooter); - map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer", value); - map.makeReadOnly(); - return map; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java deleted file mode 100644 index 531c1b48cbd7..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.model.OfficeGroupSection; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.ElementLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; - -/** - * This layoutcontroller simply checks, whether the parent layout controller - * is a OfficeGroupLayoutController and whether this layout controller is - * processing the normal flow or an repeating section. If a repeating section - * is being processed, an marker attribute is added to the element's call - * to OutputProcessor.startElement() and OutputProcessor.endElement(). - * - * @since 19.03.2007 - */ -public class OfficeGroupSectionLayoutController extends SectionLayoutController -{ - - public OfficeGroupSectionLayoutController() - { - } - - protected LayoutController startElement(final ReportTarget target) - throws DataSourceException, ReportProcessingException, ReportDataFactoryException - { - final OfficeGroupSection section = (OfficeGroupSection) getElement(); - if (!section.isRepeatSection()) - { - return super.startElement(target); - } - - final LayoutController controller = getParent(); - if (!(controller instanceof OfficeGroupLayoutController)) - { - return super.startElement(target); - } - final OfficeGroupLayoutController oglc = (OfficeGroupLayoutController) controller; - if (!oglc.isNormalFlowProcessing()) - { - return super.startElement(target); - } - - // Skip the processing if the section is a repeating header or footer and we are processing the normal flow .. - final ElementLayoutController clone = (ElementLayoutController) this.clone(); - clone.setProcessingState(ElementLayoutController.FINISHED); - return clone; - } - - protected AttributeMap computeAttributes(final FlowController fc, - final Element element, - final ReportTarget target) - throws DataSourceException - { - final AttributeMap attrs = super.computeAttributes(fc, element, target); - final LayoutController controller = getParent(); - if (!(controller instanceof OfficeGroupLayoutController)) - { - return attrs; - } - final OfficeGroupLayoutController oglc = (OfficeGroupLayoutController) controller; - if (oglc.isNormalFlowProcessing()) - { - return attrs; - } - - final AttributeMap retval = new AttributeMap(attrs); - retval.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section", OfficeToken.TRUE); - retval.makeReadOnly(); - return retval; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java deleted file mode 100644 index fb31245c9a21..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; - -/** - * Todo: Document Me - * - */ -public class OfficePageSectionLayoutController extends SectionLayoutController -{ - - public OfficePageSectionLayoutController() - { - } - - protected AttributeMap computeAttributes(final FlowController flowController, final Element element, final ReportTarget reportTarget) throws DataSourceException - { - final AttributeMap map = new AttributeMap(super.computeAttributes(flowController, element, reportTarget)); - map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role", "spreadsheet-section"); - map.makeReadOnly(); - return map; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java deleted file mode 100644 index e50b1dc9bf7b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.layoutprocessor; - -import org.jfree.report.flow.layoutprocessor.LayoutController; - -/** - * Todo: Document me! - * - * @since 22.03.2007 - */ -public interface OfficeRepeatingStructureLayoutController extends LayoutController -{ - - public boolean isNormalFlowProcessing(); - - public VariablesCollection getVariablesCollection(); -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController.java deleted file mode 100644 index 48b8614d179d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.OfficeReport; -import com.sun.star.report.pentaho.model.VariablesDeclarationSection; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportContext; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.ElementLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; -import org.jfree.report.structure.Node; - -/** - * Todo: Document me! - * - * @since 06.03.2007 - */ -public class OfficeReportLayoutController extends ElementLayoutController - implements OfficeRepeatingStructureLayoutController -{ - - private static final int STATE_NOT_STARTED = 0; - private static final int STATE_TEMPLATES = 1; - private static final int STATE_PAGE_HEADER_DONE = 2; - private static final int STATE_PAGE_FOOTER_DONE = 3; - private static final int STATE_SPREADSHEET_PAGE_HEADER_DONE = 4; - private static final int STATE_SPREADSHEET_PAGE_FOOTER_DONE = 5; - private static final int STATE_COLUMN_HEADER_DONE = 6; - private static final int STATE_COLUMN_FOOTER_DONE = 7; - private static final int STATE_INITIAL_VARIABLES_DONE = 8; - private static final int STATE_REPORT_HEADER_DONE = 9; - private static final int STATE_REPORT_BODY_DONE = 10; - private static final int STATE_REPORT_FOOTER_VARIABLES = 11; - private static final int STATE_REPORT_FOOTER_DONE = 12; - private int state; - private VariablesCollection variablesCollection; - - public OfficeReportLayoutController() - { - } - - /** - * Initializes the layout controller. This method is called exactly once. It - * is the creators responsibility to call this method. - *

- * Calling initialize after the first advance must result in a - * IllegalStateException. - * - * @param node the currently processed object or layout node. - * @param flowController the current flow controller. - * @param parent the parent layout controller that was responsible for - * instantiating this controller. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public void initialize(final Object node, final FlowController flowController, - final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - super.initialize(node, flowController, parent); - variablesCollection = new VariablesCollection("auto_report_"); - } - - /** - * Processes any content in this element. This method is called when the - * processing state is 'OPENED'. The returned layout controller will retain - * the 'OPENED' state as long as there is more content available. Once all - * content has been processed, the returned layout controller should carry a - * 'FINISHED' state. - * - * @param target the report target that receives generated events. - * @return the new layout controller instance representing the new state. - * - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - protected LayoutController processContent(final ReportTarget target) - throws DataSourceException, ReportProcessingException, - ReportDataFactoryException - { - final OfficeReport or = (OfficeReport) getElement(); - - switch (state) - { - case OfficeReportLayoutController.STATE_NOT_STARTED: - { - return delegateToTemplates(OfficeReportLayoutController.STATE_TEMPLATES); - } - case OfficeReportLayoutController.STATE_TEMPLATES: - { - return delegateSection(or.getPageHeader(), - OfficeReportLayoutController.STATE_PAGE_HEADER_DONE); - } - case OfficeReportLayoutController.STATE_PAGE_HEADER_DONE: - { - return delegateSpreadsheetSection(or.getPageHeader(), - OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_HEADER_DONE); - } - case OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_HEADER_DONE: - { - return delegateSection(or.getPageFooter(), - OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE); - } - case OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE: - { - return delegateSection(or.getColumnHeader(), - OfficeReportLayoutController.STATE_COLUMN_HEADER_DONE); - } - case OfficeReportLayoutController.STATE_COLUMN_HEADER_DONE: - { - return delegateSection(or.getColumnFooter(), - OfficeReportLayoutController.STATE_COLUMN_FOOTER_DONE); - } - case OfficeReportLayoutController.STATE_COLUMN_FOOTER_DONE: - { - return delegateSection(new VariablesDeclarationSection(), - OfficeReportLayoutController.STATE_INITIAL_VARIABLES_DONE); - } - case OfficeReportLayoutController.STATE_INITIAL_VARIABLES_DONE: - { - return delegateSection(or.getReportHeader(), - OfficeReportLayoutController.STATE_REPORT_HEADER_DONE); - } - case OfficeReportLayoutController.STATE_REPORT_HEADER_DONE: - { - return delegateSection(or.getBodySection(), - OfficeReportLayoutController.STATE_REPORT_BODY_DONE); - } - case OfficeReportLayoutController.STATE_REPORT_BODY_DONE: - { - return delegateSection(new VariablesDeclarationSection(), - OfficeReportLayoutController.STATE_REPORT_FOOTER_VARIABLES); - } - case OfficeReportLayoutController.STATE_REPORT_FOOTER_VARIABLES: - { - return delegateSection(or.getReportFooter(), - OfficeReportLayoutController.STATE_REPORT_FOOTER_DONE); - } - case OfficeReportLayoutController.STATE_REPORT_FOOTER_DONE: - { - return delegateSpreadsheetSection(or.getPageFooter(), - OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_FOOTER_DONE); - } - case OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_FOOTER_DONE: - { - final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); - olc.setProcessingState(ElementLayoutController.FINISHING); - return olc; - } - default: - { - throw new IllegalStateException("Invalid processing state encountered."); - } - } - } - - private LayoutController delegateSpreadsheetSection(final Node node, final int nextState) - throws DataSourceException, ReportProcessingException, ReportDataFactoryException - { - final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); - olc.state = nextState; - - if (node == null) - { - return olc; - } - - final OfficePageSectionLayoutController templateLc = new OfficePageSectionLayoutController(); - templateLc.initialize(node, getFlowController(), olc); - return templateLc; - } - - private LayoutController delegateToTemplates(final int nextState) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException - { - final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); - olc.state = nextState; - - final OfficeTableTemplateLayoutController templateLc = new OfficeTableTemplateLayoutController(); - templateLc.initialize(getElement(), getFlowController(), olc); - return templateLc; - - } - - private LayoutController delegateSection(final Node n, final int nextState) - throws ReportProcessingException, ReportDataFactoryException, - DataSourceException - { - final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); - olc.state = nextState; - if (n == null) - { - return olc; - } - - final FlowController flowController = getFlowController(); - final ReportContext reportContext = flowController.getReportContext(); - final LayoutControllerFactory layoutControllerFactory = - reportContext.getLayoutControllerFactory(); - return layoutControllerFactory.create(flowController, n, olc); - - } - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - { - final OfficeReportLayoutController derived = (OfficeReportLayoutController) clone(); - derived.setFlowController(flowController); - return derived; - } - - public boolean isNormalFlowProcessing() - { - return state != OfficeReportLayoutController.STATE_PAGE_HEADER_DONE && state != OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE; - } - - public VariablesCollection getVariablesCollection() - { - return variablesCollection; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController.java deleted file mode 100644 index cec85a8d681d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; -import org.jfree.report.util.IntegerCache; - -/** - * Creation-Date: 24.04.2007, 14:40:20 - * - */ -public class OfficeTableLayoutController extends SectionLayoutController -{ - - public OfficeTableLayoutController() - { - } - - protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) - throws DataSourceException - { - final AttributeMap attributeMap = new AttributeMap(super.computeAttributes(fc, element, target)); - final Section s = (Section) element; - int rowCount = 0; - final Node[] nodeArray = s.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - if (node instanceof Element) - { - final Element child = (Element) node; - if (OfficeNamespaces.TABLE_NS.equals(child.getNamespace()) && OfficeToken.TABLE_ROW.equals(child.getType())) - { - rowCount += 1; - } - } - } - - attributeMap.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "table-row-count", IntegerCache.getInteger(rowCount)); - attributeMap.makeReadOnly(); - return attributeMap; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java deleted file mode 100644 index d67ec836818d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeGroup; -import com.sun.star.report.pentaho.model.OfficeReport; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; - - -/** - * Creation-Date: 24.04.2007, 16:06:52 - * - */ -public class OfficeTableTemplateLayoutController extends SectionLayoutController -{ - - private Node[] nodes; - - public OfficeTableTemplateLayoutController() - { - } - - /** - * Initializes the layout controller. This method is called exactly once. It is the creators responsibility to call - * this method. - *

- * Calling initialize after the first advance must result in a IllegalStateException. - * - * @param node the currently processed object or layout node. - * @param flowController the current flow controller. - * @param parent the parent layout controller that was responsible for instantiating this controller. - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public void initialize(final Object node, final FlowController flowController, final LayoutController parent) - throws DataSourceException, ReportDataFactoryException, ReportProcessingException - { - final Section section = new Section(); - section.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - section.setType("template"); - super.initialize(section, flowController, parent); - - final OfficeReport report = (OfficeReport) node; - final ArrayList tables = new ArrayList(); - if (report.getPageHeader() != null) - { - addFromSection(tables, (Section) report.getPageHeader()); - } - if (report.getReportHeader() != null) - { - addFromSection(tables, (Section) report.getReportHeader()); - } - addPBody(tables, (Section) report.getPreBodySection()); - addFromBody(tables, (Section) report.getBodySection()); - addPBody(tables, (Section) report.getPostBodySection()); - if (report.getReportFooter() != null) - { - addFromSection(tables, (Section) report.getReportFooter()); - } - if (report.getPageFooter() != null) - { - addFromSection(tables, (Section) report.getPageFooter()); - } - - this.nodes = tables.toArray(new Node[tables.size()]); - } - - private void addPBody(final List tables, final Section section) - { - if (section != null) - { - // tables.add(section); - final Node[] nodeArray = section.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - tables.add(node); - } - - } - } - - private void addFromBody(final List tables, final Section section) - { - final Node[] nodeArray = section.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - if (node instanceof Section) - { - final Section child = (Section) node; - if (node instanceof OfficeGroup) - { - addFromGroup(tables, child); - } - else - { - addFromSection(tables, child); - } - } - } - } - - private void addFromGroup(final List tables, final Section section) - { - final Node[] nodeArray = section.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - if (node instanceof Section) - { - final Section element = (Section) node; - if (JFreeReportInfo.REPORT_NAMESPACE.equals(element.getNamespace()) && "group-body".equals(element.getType())) - { - addFromBody(tables, element); - } - else - { - addFromSection(tables, element); - } - } - } - } - - private void addFromSection(final List tables, final Section section) - { - final Node[] nodeArray = section.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - if (node instanceof Element) - { - final Element element = (Element) node; - if (OfficeNamespaces.TABLE_NS.equals(element.getNamespace()) && "table".equals(element.getType())) - { - tables.add(element); - } - } - } - } - - public Node[] getNodes() - { - return nodes; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController.java deleted file mode 100644 index 5e8872dc6483..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormatCondition; -import com.sun.star.report.pentaho.model.FormattedTextElement; -import com.sun.star.report.pentaho.model.ReportElement; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataSourceException; -import org.jfree.report.expressions.Expression; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.flow.layoutprocessor.SectionLayoutController; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; -import org.pentaho.reporting.libraries.formula.Formula; -import org.pentaho.reporting.libraries.formula.lvalues.LValue; -import org.pentaho.reporting.libraries.formula.parser.ParseException; - -import org.pentaho.reporting.libraries.base.util.ObjectUtilities; - -/** - * Before writing the table cell, we have to evaluate the children of the cell. The cell itself can either be empty or it - * has a one ore more paragraphs inside. The paragraph contains a single report element, but may contain additional - * other content. - * - * @noinspection CloneableClassWithoutClone - * @since 05.03.2007 - */ -public class TableCellLayoutController extends SectionLayoutController -{ - - public TableCellLayoutController() - { - } - - protected AttributeMap computeAttributes(final FlowController fc, - final Element element, - final ReportTarget target) - throws DataSourceException - { - final AttributeMap attributeMap = new AttributeMap(super.computeAttributes(fc, element, target)); - final String definedStyle = (String) attributeMap.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - attributeMap.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, getDisplayStyleName((Section) element, definedStyle)); - - try - { - final DataFlags value = computeValue(attributeMap); - final String valueType = (String) attributeMap.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); - if (value != null) - { - FormatValueUtility.applyValueForCell(value.getValue(), attributeMap, valueType); - } - else if ( "float".equals(valueType)) - { - attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, - FormatValueUtility.VALUE, "NaN"); - } - // #i114108#: except on form elements, the only value-type that can - // occur without an accompanying value attribute is "string" - else if (!"string".equals(valueType)) - { - attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, - FormatValueUtility.VALUE_TYPE, "string"); - } - } - catch (Exception e) - { - // ignore .. - } - attributeMap.makeReadOnly(); - return attributeMap; - } - - private DataFlags computeValue(final AttributeMap attributeMap) throws DataSourceException - { - // Search for the first FormattedTextElement - final Section cell = (Section) getElement(); - final FormattedTextElement element = findFormattedTextElement(cell); - if (element == null) - { - return null; - } - if (!FormatValueUtility.shouldPrint(this, element)) - { - attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, - FormatValueUtility.VALUE_TYPE, "string"); - return null; - } - return FormatValueUtility.computeDataFlag(element, getFlowController()); - } - - public boolean isValueChanged() - { - try - { - final Section cell = (Section) getElement(); - final FormattedTextElement element = findFormattedTextElement(cell); - if (element == null) - return false; - else - { - final FormulaExpression formulaExpression = element.getValueExpression(); - final Formula formula = formulaExpression.getCompiledFormula(); - final LValue lValue = formula.getRootReference(); - return FormatValueUtility.isReferenceChanged(this, lValue); - } - } - catch (final ParseException e) - { - //LOGGER.debug("Parse Exception", e); - return false; - } - } - - private FormattedTextElement findFormattedTextElement(final Section section) - { - final Node[] nodeArray = section.getNodeArray(); - for (int i = 0; i < nodeArray.length; i++) - { - final Node node = nodeArray[i]; - if (node instanceof FormattedTextElement) - { - return (FormattedTextElement) node; - } - else if (node instanceof Section) - { - final FormattedTextElement retval = findFormattedTextElement((Section) node); - if (retval != null) - { - return retval; - } - } - } - return null; - } - - private String getDisplayStyleName(final Section section, - final String defaultStyle) - { - if (!section.isEnabled() || section.getNodeCount() == 0) - { - return defaultStyle; - } - - final Node[] nodes = section.getNodeArray(); - for (int i = 0; i < nodes.length; i++) - { - final Node child = nodes[i]; - if (child instanceof ReportElement && child.isEnabled()) - { - final ReportElement element = (ReportElement) child; - if (element.getFormatConditionCount() > 0) - { - final Expression displayCond = element.getDisplayCondition(); - if (displayCond != null) - { - try - { - if (Boolean.FALSE.equals(LayoutControllerUtil.evaluateExpression(getFlowController(), element, displayCond))) - { - continue; - } - } - catch (DataSourceException e) - { - // ignore silently .. - } - } - - final FormatCondition[] conditions = element.getFormatConditions(); - for (int j = 0; j < conditions.length; j++) - { - final FormatCondition formCond = conditions[j]; - if (formCond.isEnabled()) - { - try - { - final Object o = LayoutControllerUtil.evaluateExpression(getFlowController(), element, formCond.getFormula()); - if (Boolean.TRUE.equals(o)) - { - return formCond.getStyleName(); - } - } - catch (DataSourceException e) - { - // ignore silently .. - } - } - } - } - } - - if (child instanceof Section) - { - final String childFormatCondition = - getDisplayStyleName((Section) child, defaultStyle); - if (!ObjectUtilities.equal(childFormatCondition, defaultStyle)) - { - return childFormatCondition; - } - } - } - return defaultStyle; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection.java deleted file mode 100644 index bff20a8416d3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.model.FormattedTextElement; - -import java.util.ArrayList; -import java.util.List; - - -/** - * A variables collection is used to collect all FormattedTextElement objects - * of a repeated header or footer. Later, for each of these elements a variable - * setter is inserted into a hidden (in fact just very small) paragraph. These - * variables can later be read using the 'variable-get' construct. - * - * From the idea, this is equal to the 'strings' declaration of CSS3, although - * this code is explicit instead of declarative. - * - * @since 22.03.2007 - */ -public class VariablesCollection -{ - - private VariablesCollection parent; - private String namePrefix; - private List variables; - - public VariablesCollection(final String namePrefix) - { - this(namePrefix, null); - } - - public VariablesCollection(final String namePrefix, final VariablesCollection parent) - { - if (namePrefix == null) - { - throw new NullPointerException("NamePrefix cannot be null"); - } - - this.namePrefix = namePrefix; - this.parent = parent; - this.variables = new ArrayList(); - } - - public VariablesCollection getParent() - { - return parent; - } - - public String getNamePrefix() - { - return namePrefix; - } - - public String addVariable(final FormattedTextElement element) - { - variables.add(element); - final int size = variables.size(); - return namePrefix + size; - } - - public FormattedTextElement[] getVariables() - { - return variables.toArray(new FormattedTextElement[variables.size()]); - } - - public int getVariablesCount() - { - return variables.size(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java b/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java deleted file mode 100644 index f1a55cb15bc7..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.layoutprocessor; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormattedTextElement; - -import java.text.SimpleDateFormat; - -import java.util.Date; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.flow.FlowController; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.layoutprocessor.AbstractLayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutController; -import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; -import org.jfree.report.structure.Element; - -/** - * Writes a full variables-declaration section. - * - * @since 20.03.2007 - */ -public class VariablesDeclarationLayoutController - extends AbstractLayoutController -{ - - private boolean processed; - - public VariablesDeclarationLayoutController() - { - } - - private OfficeRepeatingStructureLayoutController getRepeatingParent() - { - LayoutController parent = getParent(); - while (parent != null) - { - if (parent instanceof OfficeRepeatingStructureLayoutController) - { - return (OfficeRepeatingStructureLayoutController) parent; - } - parent = parent.getParent(); - } - return null; - } - - /** - * Advances the processing position. - * - * @param target the report target that receives generated events. - * @return the new layout controller instance representing the new state. - * - * @throws org.jfree.report.DataSourceException - * if there was a problem reading data from the datasource. - * @throws org.jfree.report.ReportProcessingException - * if there was a general problem during the report processing. - * @throws org.jfree.report.ReportDataFactoryException - * if a query failed. - */ - public LayoutController advance(final ReportTarget target) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - if (processed) - { - throw new IllegalStateException("Already processed."); - } - - final VariablesDeclarationLayoutController vlc = - (VariablesDeclarationLayoutController) clone(); - vlc.processed = true; - - final OfficeRepeatingStructureLayoutController orslc = getRepeatingParent(); - if (orslc == null) - { - // There is no repeating parent. What the heck are we doing here .. - return vlc; - } - - final VariablesCollection collection = orslc.getVariablesCollection(); - if (collection.getVariablesCount() == 0) - { - // no processing necessary, as the header or footer contain no variables at all .. - return vlc; - } - - - final Element node = (Element) getNode(); - final AttributeMap vdSection = node.getAttributeMap(); - target.startElement(vdSection); - - final FormattedTextElement[] variables = collection.getVariables(); - for (int i = 0; i < variables.length; i++) - { - final FormattedTextElement variable = variables[i]; - final String varName = collection.getNamePrefix() + (i + 1); - final AttributeMap map = generateVariableSetSection(variable); - map.setAttribute(OfficeNamespaces.TEXT_NS, "name", varName); - target.startElement(map); - target.endElement(map); - - } - target.endElement(vdSection); - return vlc; - } - - private AttributeMap generateVariableSetSection(final FormattedTextElement variable) - throws DataSourceException - { - final AttributeMap variableSection = new AttributeMap(); - variableSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TEXT_NS); - variableSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, "variable-set"); - variableSection.setAttribute(OfficeNamespaces.TEXT_NS, "display", "none"); - - final FormulaExpression valueExpression = variable.getValueExpression(); - final Object value = LayoutControllerUtil.evaluateExpression(getFlowController(), variable, valueExpression); - String formula = FormatValueUtility.applyValueForVariable(value, variableSection); - if (formula == null) - { - formula = "" + value; - } - if (value instanceof java.sql.Date) - { - final Date date = (Date) value; - final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy;MM;dd"); - formula = "Date(" + dateFormat.format(date) + ")"; - } - variableSection.setAttribute(OfficeNamespaces.TEXT_NS, "formula", "ooow:" + formula); - - return variableSection; - } - - /** - * Checks, whether the layout controller would be advanceable. If this method - * returns true, it is generally safe to call the 'advance()' method. - * - * @return true, if the layout controller is advanceable, false otherwise. - */ - public boolean isAdvanceable() - { - return !processed; - } - - /** - * Joins with a delegated process flow. This is generally called from a child - * flow and should *not* (I mean it!) be called from outside. If you do, - * you'll suffer. - * - * @param flowController the flow controller of the parent. - * @return the joined layout controller that incorperates all changes from the - * delegate. - */ - public LayoutController join(final FlowController flowController) - throws DataSourceException, ReportDataFactoryException, - ReportProcessingException - { - throw new UnsupportedOperationException("Join is not supported in this layout controller"); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader.java b/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader.java deleted file mode 100644 index 06d32385db1d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.loader; - -import com.sun.star.report.InputRepository; - -import java.net.URL; - -import java.util.HashMap; -import java.util.Map; - -import org.pentaho.reporting.libraries.resourceloader.ResourceData; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException; -import org.pentaho.reporting.libraries.resourceloader.ResourceLoader; -import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.resourceloader.loader.LoaderUtils; - - -public class InputRepositoryLoader implements ResourceLoader -{ - - private final InputRepository inputRepository; - private ResourceManager resourceManager; - - public InputRepositoryLoader(final InputRepository inputRepository) - { - if (inputRepository == null) - { - throw new NullPointerException(); - } - this.inputRepository = inputRepository; - } - - /** - * Checks, whether this resource loader implementation was responsible for - * creating this key. - * - * @param key - * @return - */ - public boolean isSupportedKey(final ResourceKey key) - { - return InputRepositoryLoader.class.getName().equals(key.getSchema()); - } - - /** - * Creates a new resource key from the given object and the factory keys. - * - * @param value - * @param factoryKeys - * @return the created key or null, if the format was not recognized. - * @throws org.jfree.resourceloader.ResourceKeyCreationException - * if creating the key failed. - */ - public ResourceKey createKey(final Object value, - final Map factoryKeys) - throws ResourceKeyCreationException - { - if (value instanceof String) - { - final String strVal = (String) value; - if (strVal.startsWith("sun:oo://")) - { - return new ResourceKey(InputRepositoryLoader.class.getName(), - new InputResourceKey(inputRepository.getId(), strVal), factoryKeys); - } - } - return null; - } - - /** - * Derives a new resource key from the given key. If neither a path nor new - * factory-keys are given, the parent key is returned. - * - * @param parent the parent - * @param path the derived path (can be null). - * @param factoryKeys the optional factory keys (can be null). - * @return the derived key. - * @throws org.jfree.resourceloader.ResourceKeyCreationException - * if the key cannot be derived for any reason. - */ - @SuppressWarnings("unchecked") - public ResourceKey deriveKey(final ResourceKey parent, - final String path, - final Map factoryKeys) - throws ResourceKeyCreationException - { - if (!isSupportedKey(parent)) - { - throw new ResourceKeyCreationException("Assertation: Unsupported parent key type"); - } - - final InputResourceKey parentKey = (InputResourceKey) parent.getIdentifier(); - final String resource; - if (path.startsWith("sun:oo://")) - { - resource = path; - } - else if (path.charAt(0) == '/') - { - resource = "sun:oo:/" + path; - } - else - { - resource = LoaderUtils.mergePaths(parentKey.getPath(), path); - } - final Map map; - if (factoryKeys != null) - { - map = new HashMap(); - map.putAll(parent.getFactoryParameters()); - map.putAll(factoryKeys); - } - else - { - map = parent.getFactoryParameters(); - } - return new ResourceKey(parent.getSchema(), - new InputResourceKey(parentKey.getInputRepositoryId(), resource), map); - } - - public URL toURL(final ResourceKey key) - { - return null; - } - - public ResourceData load(final ResourceKey key) - throws ResourceLoadingException - { - if (!isSupportedKey(key)) - { - throw new ResourceLoadingException("None of my keys."); - } - - return new InputRepositoryResourceData(key, inputRepository); - } - - public void setResourceManager(final ResourceManager manager) - { - this.resourceManager = manager; - } - - public ResourceManager getResourceManager() - { - return resourceManager; - } - - public boolean isSupportedDeserializer(String string) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - public String serialize(ResourceKey rk, ResourceKey rk1) throws ResourceException - { - throw new UnsupportedOperationException("Not supported yet."); - } - - public ResourceKey deserialize(ResourceKey rk, String string) throws ResourceKeyCreationException - { - throw new UnsupportedOperationException("Not supported yet."); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData.java b/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData.java deleted file mode 100644 index 525539f368f3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.loader; - -import com.sun.star.report.InputRepository; - -import java.io.IOException; -import java.io.InputStream; - -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.resourceloader.loader.AbstractResourceData; - - -public class InputRepositoryResourceData extends AbstractResourceData -{ - - private final InputRepository inputRepository; - private final ResourceKey key; - private final String resourceIdentifer; - - public InputRepositoryResourceData(final ResourceKey key, - final InputRepository repository) - { - this.key = key; - this.inputRepository = repository; - final InputResourceKey rkey = (InputResourceKey) key.getIdentifier(); - final String identifier = rkey.getPath(); - this.resourceIdentifer = identifier.substring("sun:oo://".length()); - } - - public Object getAttribute(final String key) - { - // we dont support attributes here .. - return null; - } - - public ResourceKey getKey() - { - return key; - } - - public InputStream getResourceAsStream(final ResourceManager caller) - throws ResourceLoadingException - { - try - { - return inputRepository.createInputStream(resourceIdentifer); - } - catch (IOException e) - { - throw new ResourceLoadingException("Failed to create input stream for " + resourceIdentifer, e); - } - } - - public long getVersion(final ResourceManager caller) - { - return inputRepository.getVersion(resourceIdentifer); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey.java b/reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey.java deleted file mode 100644 index ae2e34e73296..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.loader; - -import java.io.Serializable; - -/** - * Creation-Date: Feb 22, 2007, 8:51:42 PM - * - */ -public class InputResourceKey implements Serializable -{ - - private static final long serialVersionUID = 2819901838705793075L; - private final Object inputRepositoryId; - private final String path; - - public InputResourceKey(final Object inputRepositoryId, final String path) - { - this.inputRepositoryId = inputRepositoryId; - this.path = path; - } - - public Object getInputRepositoryId() - { - return inputRepositoryId; - } - - public String getPath() - { - return path; - } - - public String toString() - { - return "InputResourceKey{" + "inputRepositoryId=" + inputRepositoryId + ", path='" + path + '\'' + '}'; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle.java b/reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle.java deleted file mode 100644 index fedbb71f1ada..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Section; - -/** - * Represents an automatic or manual data style definition. - * - * @since 02.03.2007 - */ -public class DataStyle extends Section -{ - - public DataStyle() - { - } - - public String getStyleName() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); - } - - public void setStyleName(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "name", name); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement.java deleted file mode 100644 index e411ad05ef8e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.Section; - -/** - * Todo: Document me! - * - * @since 02.03.2007 - */ -public class FixedTextElement extends ReportElement -{ - - private final Section content; - - public FixedTextElement() - { - content = new Section(); - content.setVirtual(true); - } - - public Section getContent() - { - return content; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection.java deleted file mode 100644 index e3b98b4c549e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import java.util.HashMap; -import java.util.Map; - -import org.jfree.report.structure.Element; - - -/** - * Todo: Document me! - * - * @since 13.03.2007 - */ -public class FontFaceDeclsSection extends Element -{ - - private final Map fontFaces; - - public FontFaceDeclsSection() - { - fontFaces = new HashMap(); - setType("font-face-decls"); - setNamespace(OfficeNamespaces.OFFICE_NS); - } - - public void addFontFace(final FontFaceElement style) - { - fontFaces.put(style.getStyleName(), style); - } - - public FontFaceElement getFontFace(final String name) - { - return fontFaces.get(name); - } - - public FontFaceElement[] getAllFontFaces() - { - return fontFaces.values().toArray(new FontFaceElement[fontFaces.size()]); - } - - public boolean containsFont(final String fontName) - { - return fontFaces.containsKey(fontName); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement.java deleted file mode 100644 index 0bebe6efbdf1..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Section; - -/** - * Represents an automatic or manual data style definition. - * - * @since 02.03.2007 - */ -public class FontFaceElement extends Section -{ - - public FontFaceElement() - { - } - - public String getStyleName() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); - } - - public void setStyleName(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "name", name); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition.java b/reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition.java deleted file mode 100644 index 6543aa59e14b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.expressions.FormulaExpression; - -/** - * The format condition defines, what style-format is applied to an element. - * - * @since 02.03.2007 - */ -public class FormatCondition -{ - - private final FormulaExpression formula; - private final String styleName; - private final boolean enabled; - - public FormatCondition(final FormulaExpression formula, - final String styleName, - final boolean enabled) - { - this.formula = formula; - this.styleName = styleName; - this.enabled = enabled; - } - - public FormulaExpression getFormula() - { - return formula; - } - - public String getStyleName() - { - return styleName; - } - - public boolean isEnabled() - { - return enabled; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement.java deleted file mode 100644 index 3570fca99d8d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.expressions.FormulaExpression; - -/** - * A formatted text element takes a formula, evaluates it and formats the - * given element using some arbitary style. (As this is totally undocumented, - * we leave this out for now. Either we'll insert a field there or we call - * an UNO-component to do the formatting. - * - * @since 02.03.2007 - */ -public class FormattedTextElement extends ReportElement -{ - - private FormulaExpression valueExpression; - - public FormattedTextElement() - { - } - - public FormulaExpression getValueExpression() - { - return valueExpression; - } - - public void setValueExpression(final FormulaExpression valueExpression) - { - this.valueExpression = valueExpression; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement.java deleted file mode 100644 index 6cf2c4406db0..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.expressions.FormulaExpression; - -/** - * Todo: Document me! - * - * @since 02.03.2007 - */ -public class ImageElement extends ReportElement -{ - - private FormulaExpression formula; - - public ImageElement() - { - } - - public FormulaExpression getFormula() - { - return formula; - } - - public void setFormula(final FormulaExpression formula) - { - this.formula = formula; - } - - public String getScaleMode() - { - String val = (String) getAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.SCALE); - if (OfficeToken.TRUE.equals(val)) - { - val = OfficeToken.ANISOTROPIC; - } - else if (OfficeToken.FALSE.equals(val) || val == null) - { - val = OfficeToken.NONE; - } - return val; - } - - public boolean isPreserveIRI() - { - return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI)); - } - - public void setPreserveIRI(final boolean preserveIRI) - { - setAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI, String.valueOf(preserveIRI)); - } - - public String getImageData() - { - return (String) getAttribute(OfficeNamespaces.FORM_NS, OfficeToken.IMAGE_DATA); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement.java deleted file mode 100644 index 9737f23c557e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import java.util.ArrayList; -import java.util.List; - -public class ObjectOleElement extends ReportElement -{ - - private String url; - private final List masterfields; - private final List detailfields; - private String classid; - - public ObjectOleElement() - { - masterfields = new ArrayList(); - detailfields = new ArrayList(); - } - - public String getClassid() - { - return classid; - } - - public List getDetailfields() - { - return detailfields; - } - - public List getMasterfields() - { - return masterfields; - } - - public String getUrl() - { - return url; - } - - public void setClassId(final String classid) - { - this.classid = classid; - } - - public void setUrl(final String _url) - { - url = _url; - } - - public void addMasterDetailFields(final String master, final String detail) - { - if (master != null) - { - masterfields.add(master); - detailfields.add(detail == null ? master : detail); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection.java deleted file mode 100644 index 659c129b6941..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.DetailSection; - -/** - * A Marker-Class. - * - * @since 02.03.2007 - */ -public class OfficeDetailSection extends DetailSection -{ - - public OfficeDetailSection() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument.java deleted file mode 100644 index dc5117a887e6..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.JobProperties; - -import org.jfree.report.JFreeReport; - -/** - * An office document represents the root of the report processing. In - * OpenOffice reports, this is the only child of the report object. - * - * @since 02.03.2007 - */ -public class OfficeDocument extends JFreeReport -{ - - private OfficeStylesCollection stylesCollection; - private JobProperties jobProperties; - - public JobProperties getJobProperties() - { - return jobProperties; - } - - public void setJobProperties(final JobProperties jobProperties) - { - this.jobProperties = jobProperties; - } - - public OfficeDocument() - { - } - - public OfficeStylesCollection getStylesCollection() - { - return stylesCollection; - } - - public void setStylesCollection(final OfficeStylesCollection stylesCollection) - { - if (stylesCollection == null) - { - throw new NullPointerException(); - } - this.stylesCollection = stylesCollection; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup.java deleted file mode 100644 index 6497d5ad06fc..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.expressions.Expression; -import org.jfree.report.structure.Section; - -/** - * An office group is a virtual section that contains the group header, footer - * and either a detail section or another group. - * - * @since 02.03.2007 - */ -public class OfficeGroup extends Section -{ - - public OfficeGroup() - { - } - - public boolean isStartNewColumn() - { - return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "start-new-column")); - } - - public boolean isResetPageNumber() - { - return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "reset-page-number")); - } - - public OfficeGroupSection getHeader() - { - final OfficeGroupInstanceSection instanceSection = - (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); - if (instanceSection == null) - { - return null; - } - return (OfficeGroupSection) instanceSection.findFirstChild(OfficeNamespaces.OOREPORT_NS, "group-header"); - - } - - public OfficeGroupSection getFooter() - { - final OfficeGroupInstanceSection instanceSection = - (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); - if (instanceSection == null) - { - return null; - } - return (OfficeGroupSection) instanceSection.findFirstChild(OfficeNamespaces.OOREPORT_NS, "group-footer"); - - } - - public Expression getGroupingExpression() - { - final OfficeGroupInstanceSection instanceSection = - (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); - if (instanceSection == null) - { - return null; - } - return instanceSection.getGroupingExpression(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection.java deleted file mode 100644 index 501aa450fb95..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.Group; - -/** - * Creation-Date: 25.07.2007, 14:41:54 - * - */ -public class OfficeGroupInstanceSection extends Group -{ - - public OfficeGroupInstanceSection() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection.java deleted file mode 100644 index ad9f59ba6478..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Section; - -/** - * A group header or footer. If such a section is marked as sticky, it will be - * repeated on each new page. - * - * @since 02.03.2007 - */ -public class OfficeGroupSection extends Section -{ - - public OfficeGroupSection() - { - } - - public boolean isRepeatSection() - { - final Object repeatFlag = - getAttribute(OfficeNamespaces.OOREPORT_NS, "repeat-section"); - return OfficeToken.TRUE.equals(repeatFlag); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage.java deleted file mode 100644 index 4b5edbb838dd..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Section; - -/** - * A master page. A master page can contain header and footer and is linked - * to a page-layout. - * - * @since 13.03.2007 - */ -public class OfficeMasterPage extends Section -{ - - public OfficeMasterPage() - { - } - - public String getStyleName() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); - } - - public void setStyleName(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "name", name); - } - - public String getPageLayout() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "page-layout-name"); - } - - public void setPageLayout(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "page-layout-name", name); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles.java deleted file mode 100644 index 8fc66950ccb9..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import java.util.HashMap; -import java.util.Map; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - - -/** - * The master-styles section can have either a master-page, handout-master - * or draw-layer-set. (The latter ones are ignored for the reporting purposes, - * they are PowerPoint related.) - * - * There is no documentation how the system selects a master-page if there is - * no master-page assigned to the paragraph. However, it seems as if the - * master-page called 'Standard' is used as initial default. - * - * @since 13.03.2007 - */ -public class OfficeMasterStyles extends Element -{ - - private final Map masterPages; - private final Section otherNodes; - - public OfficeMasterStyles() - { - masterPages = new HashMap(); - otherNodes = new Section(); - } - - public void addMasterPage(final OfficeMasterPage masterPage) - { - if (masterPage == null) - { - throw new NullPointerException(); - } - this.masterPages.put(masterPage.getStyleName(), masterPage); - } - - public OfficeMasterPage getMasterPage(final String name) - { - return masterPages.get(name); - } - - public OfficeMasterPage[] getAllMasterPages() - { - return masterPages.values().toArray(new OfficeMasterPage[masterPages.size()]); - } - - public Section getOtherNodes() - { - return otherNodes; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport.java deleted file mode 100644 index 6a46021ec05b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; - -/** - * A office report is an ordered section. It contains several root-level bands - * which need to be processed in a given order. - * - * A report can have named expression attached. These expressions will be - * computed at the global scope and will be available for all child elements. - * - * @since 02.03.2007 - */ -public class OfficeReport extends Element -{ - - private Node pageHeader; - private Node pageFooter; - private Node columnHeader; - private Node columnFooter; - private Node reportHeader; - private Node reportFooter; - private Node bodySection; - private Node preBodySection; - private Node postBodySection; - - public Node getPostBodySection() - { - return postBodySection; - } - - public void setPostBodySection(final Node postBodySection) - { - this.postBodySection = postBodySection; - } - - public Node getPreBodySection() - { - return preBodySection; - } - - public void setPreBodySection(final Node preBodySection) - { - this.preBodySection = preBodySection; - } - - public OfficeReport() - { - } - - public Node getPageHeader() - { - return pageHeader; - } - - public void setPageHeader(final Node pageHeader) - { - this.pageHeader = pageHeader; - } - - public Node getPageFooter() - { - return pageFooter; - } - - public void setPageFooter(final Node pageFooter) - { - this.pageFooter = pageFooter; - } - - public Node getColumnHeader() - { - return columnHeader; - } - - public void setColumnHeader(final Node columnHeader) - { - this.columnHeader = columnHeader; - } - - public Node getColumnFooter() - { - return columnFooter; - } - - public void setColumnFooter(final Node columnFooter) - { - this.columnFooter = columnFooter; - } - - public Node getReportHeader() - { - return reportHeader; - } - - public void setReportHeader(final Node reportHeader) - { - this.reportHeader = reportHeader; - } - - public Node getReportFooter() - { - return reportFooter; - } - - public void setReportFooter(final Node reportFooter) - { - this.reportFooter = reportFooter; - } - - public Node getBodySection() - { - return bodySection; - } - - public void setBodySection(final Node bodySection) - { - this.bodySection = bodySection; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle.java deleted file mode 100644 index 65e31c0af92e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -/** - * Represents an automatic or manual style definition. - * - * @since 02.03.2007 - */ -public class OfficeStyle extends Section -{ - - public OfficeStyle() - { - setNamespace(OfficeNamespaces.STYLE_NS); - setType("style"); - } - - public String getStyleName() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); - } - - public void setStyleName(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "name", name); - } - - /** - * A parent style name must be a common style (it cannot be an automatic - * style) and has to exist. If no parent style is given, an implementation - * specific default style is used. - * - * @return - */ - public String getStyleParent() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "parent-style-name"); - } - - public void setStyleParent(final String parentName) - { - setAttribute(OfficeNamespaces.STYLE_NS, "parent-style-name", parentName); - } - - public String getStyleFamily() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "family"); - } - - public void setStyleFamily(final String family) - { - setAttribute(OfficeNamespaces.STYLE_NS, "family", family); - } - -// public String getMasterPageName() -// { -// return (String) getAttribute(OfficeNamespaces.STYLE_NS, "master-page-name"); -// } - public Element getParagraphProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "paragraph-properties"); - } - - public Element getTextProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "text-properties"); - } - - public Element getTableRowProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "table-row-properties"); - } - - public Element getTableProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "table-properties"); - } - - public Element getTableColumnProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "table-column-properties"); - } - - public Element getSectionProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "section-properties"); - } - - public Element getTableCellProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, "table-cell-properties"); - } - - public Element getGraphicProperties() - { - return findFirstChild(OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles.java deleted file mode 100644 index 9a60bd7703e2..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jfree.report.structure.Element; - - -/** - * Holds one style type, either an automatic, common or master style. This is a - * marker container that defines the nature of the styles contained within this - * container. (Yeah, it is awkward, but that's how the document model describes - * it.) - * - * The style family can be one of paragraph, text, section, table, table-column, - * table-row, table-cell, table-page, chart, default, drawing-page, graphic, - * presentation, control and ruby. - * - * @since 07.03.2007 - */ -public class OfficeStyles extends Element -{ - - public static class StyleKey implements Serializable - { - - private static final long serialVersionUID = 4931878927362887477L; - private final String family; - private final String name; - - public StyleKey(final String family, final String name) - { - if (family == null) - { - throw new NullPointerException(); - } - this.family = family; - this.name = name; - } - - public String getFamily() - { - return family; - } - - public String getName() - { - return name; - } - - public boolean equals(final Object obj) - { - if (this != obj) - { - if (obj == null || getClass() != obj.getClass()) - { - return false; - } - - final StyleKey styleKey = (StyleKey) obj; - - if (!family.equals(styleKey.family) || (name != null ? !name.equals(styleKey.name) : styleKey.name != null)) - { - return false; - } - } - return true; - } - - public int hashCode() - { - int result = family.hashCode(); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - } - private final Map pageStyles; - private final Map dataStyles; - private final Map styles; - private final List otherChildren; - - public OfficeStyles() - { - this.styles = new HashMap(); - this.dataStyles = new HashMap(); - this.pageStyles = new HashMap(); - this.otherChildren = new ArrayList(); - } - - public OfficeStyle getStyle(final String family, final String name) - { - return styles.get(new StyleKey(family, name)); - } - - public void addStyle(final OfficeStyle style) - { - if (style == null) - { - throw new NullPointerException(); - } - final String styleFamily = style.getStyleFamily(); - if (styleFamily == null) - { - throw new NullPointerException(); - } - if (style.getStyleName() == null) - { - throw new NullPointerException(); - } - styles.put(new StyleKey(styleFamily, style.getStyleName()), style); - } - - public void addPageStyle(final PageLayout style) - { - pageStyles.put(style.getStyleName(), style); - } - - public PageLayout getPageStyle(final String name) - { - return pageStyles.get(name); - } - - public void addDataStyle(final DataStyle style) - { - dataStyles.put(style.getStyleName(), style); - } - - public DataStyle getDataStyle(final String name) - { - return dataStyles.get(name); - } - - public void addOtherNode(final Element node) - { - otherChildren.add(node); - } - - public DataStyle[] getAllDataStyles() - { - return dataStyles.values().toArray(new DataStyle[dataStyles.size()]); - } - - public PageLayout[] getAllPageStyles() - { - return pageStyles.values().toArray(new PageLayout[pageStyles.size()]); - } - - public OfficeStyle[] getAllStyles() - { - return styles.values().toArray(new OfficeStyle[styles.size()]); - } - - public Element[] getOtherStyles() - { - return otherChildren.toArray(new Element[otherChildren.size()]); - } - - public boolean containsStyle(final String family, final String name) - { - return styles.containsKey(new StyleKey(family, name)); - } - - public boolean containsDataStyle(final String styleName) - { - return dataStyles.containsKey(styleName); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection.java deleted file mode 100644 index bde44116d8ec..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Element; - -/** - * Holds all style-definitions and provides some simplified lookup methods to - * grab them by their type and name. - *

- * For now, we are only interested in 'style:style' nodes. Each of these nodes - * has a style-name and a style-family. Each style declaration can have a parent - * style, from which properties are inherited. - *

- * Style names are unique within the family, no matter whether the style is an - * automatic style, an common style or a master style. - *

- * The contents of this element are the union of the 'styles.xml' file (if it - * exists), the font-declarations and auto-styles of the document-content.xml - * and the styles declared in the main document. - * - * @since 06.03.2007 - */ -public class OfficeStylesCollection extends Element -{ - // Font-face declarations are copied as is. We simply merge them by adding - // them all in one set. This may result in duplicate entries, but as the - // fileformat does not forbid that, it therefore must be ok. - - private final FontFaceDeclsSection fontFaceDecls; - private final OfficeStyles automaticStyles; - private final OfficeStyles commonStyles; - private final OfficeMasterStyles masterStyles; - - public OfficeStylesCollection() - { - fontFaceDecls = new FontFaceDeclsSection(); - - automaticStyles = new OfficeStyles(); - automaticStyles.setType("automatic-styles"); - automaticStyles.setNamespace(OfficeNamespaces.OFFICE_NS); - - commonStyles = new OfficeStyles(); - commonStyles.setType("styles"); - commonStyles.setNamespace(OfficeNamespaces.OFFICE_NS); - - masterStyles = new OfficeMasterStyles(); - masterStyles.setType("master-styles"); - masterStyles.setNamespace(OfficeNamespaces.OFFICE_NS); - } - - public OfficeStyle getStyle(final String family, final String name) - { - final OfficeStyle commonStyle = commonStyles.getStyle(family, name); - if (commonStyle != null) - { - return commonStyle; - } - final OfficeStyle autoStyle = automaticStyles.getStyle(family, name); - if (autoStyle != null) - { - return autoStyle; - } - - // And later: Autogenerate one of the default styles. - // However, at this moment, we dont have a clue about the default styles - // at all. Maybe we should add them to make this implementation more robust - // against invalid documents. - return null; - } - - public boolean containsStyle(final String family, final String name) - { - return (getStyle(family, name) != null); - } - - public OfficeStyles getAutomaticStyles() - { - return automaticStyles; - } - - public OfficeStyles getCommonStyles() - { - return commonStyles; - } - - public OfficeMasterStyles getMasterStyles() - { - return masterStyles; - } - - public FontFaceDeclsSection getFontFaceDecls() - { - return fontFaceDecls; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection.java deleted file mode 100644 index 5a6dfad1bd24..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.Section; - -/** - * Creation-Date: 24.04.2007, 15:55:17 - * - */ -public class OfficeTableSection extends Section -{ - - public OfficeTableSection() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout.java b/reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout.java deleted file mode 100644 index 1b58d2b3f864..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.structure.Section; - -/** - * A page layout describes the physical properties of a page. It is equal to - * an @page rule in CSS. - * - * @since 13.03.2007 - */ -public class PageLayout extends Section -{ - - public PageLayout() - { - setNamespace(OfficeNamespaces.STYLE_NS); - setType("page-layout"); - } - - public String getStyleName() - { - return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); - } - - public void setStyleName(final String name) - { - setAttribute(OfficeNamespaces.STYLE_NS, "name", name); - } - - public Section getHeaderStyle() - { - return (Section) findFirstChild(OfficeNamespaces.STYLE_NS, "header-style"); - } - - public Section getFooterStyle() - { - return (Section) findFirstChild(OfficeNamespaces.STYLE_NS, "footer-style"); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/PageSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/PageSection.java deleted file mode 100644 index 599fc0a9af94..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/PageSection.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.structure.Section; - -/** - * This represents either a page header or page footer. - * - * @since 02.03.2007 - */ -public class PageSection extends Section -{ - - private static final String NOT_WITH_REPORT_HEADER_NOR_FOOTER = "not-with-report-header-nor-footer"; - - public PageSection() - { - } - - public static boolean isPrintWithReportHeader(final AttributeMap attrs) - { - final String pagePrintOption = (String) attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "page-print-option"); - return !("not-with-report-header".equals(pagePrintOption) || NOT_WITH_REPORT_HEADER_NOR_FOOTER.equals(pagePrintOption)); - } - - public static boolean isPrintWithReportFooter(final AttributeMap attrs) - { - final String pagePrintOption = (String) attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "page-print-option"); - return !("not-with-report-footer".equals(pagePrintOption) || NOT_WITH_REPORT_HEADER_NOR_FOOTER.equals(pagePrintOption)); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/RawText.java b/reportbuilder/java/com/sun/star/report/pentaho/model/RawText.java deleted file mode 100644 index 588a8f0c5648..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/RawText.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.StaticText; - -/** - * A marker implementation. If encountered by the OfficeRawTarget, this text - * will be written without being normalized. Such text represents a page - * header or footer. - * - * @since 13.03.2007 - */ -public class RawText extends StaticText -{ - - public RawText(final String text) - { - super(text); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement.java deleted file mode 100644 index 37e11ffc0637..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - - -/** - * A report element is the base class for all content generating elements in a - * report. - * - * @since 02.03.2007 - */ -public abstract class ReportElement extends Element -{ - - private final List formatConditions; - - protected ReportElement() - { - formatConditions = new ArrayList(); - } - - /** - * Checks the current group and prints this element only if the current row is - * the first row for that particular group. - * - * @return true, if the element should only be printed in the first row of the - * current group, false otherwise. - */ - public boolean isPrintWhenGroupChange() - { - return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "print-when-group-change")); - } - - public void setPrintWhenGroupChange(final boolean printWhenGroupChange) - { - setAttribute(OfficeNamespaces.OOREPORT_NS, "print-when-group-change", - String.valueOf(printWhenGroupChange)); - } - - /** - * Checks, whether the printed value has been changed since the last run. The - * element will only be printed, if there was at least one change. - * - * @return true, if repeated values should be printed, false if repeated - * values should be surpressed. - */ - public boolean isPrintRepeatedValues() - { - return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "print-repeated-values")); - } - - public void setPrintRepeatedValues(final boolean printRepeatedValues) - { - setAttribute(OfficeNamespaces.OOREPORT_NS, "print-repeated-values", - String.valueOf(printRepeatedValues)); - } - - public void addFormatCondition(final FormatCondition formatCondition) - { - if (formatCondition == null) - { - throw new NullPointerException(); - } - - this.formatConditions.add(formatCondition); - } - - public FormatCondition[] getFormatConditions() - { - return this.formatConditions.toArray(new FormatCondition[this.formatConditions.size()]); - } - - public int getFormatConditionCount() - { - return formatConditions.size(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement.java b/reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement.java deleted file mode 100644 index 0cae16a45d12..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.structure.Section; - -/** - * Todo: Document me! - * - * @since 05.03.2007 - */ -public class TableCellElement extends Section -{ - - public TableCellElement() - { - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection.java b/reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection.java deleted file mode 100644 index 3b025812f57b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.model; - -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.structure.Section; - -/** - * A paragraph that contains variables-declarations. This paragraph will be - * printed in the first cell of the first table (if there's one). - * - * The VariablesDeclarationSection is an auto-generated structure element that - * has no model-representation. The section itself is empty and simply acts - * as flag for the output-processor. The output processor itself is responsible - * to maintain the variables. - * - * @since 19.03.2007 - */ -public class VariablesDeclarationSection extends Section -{ - - public VariablesDeclarationSection() - { - setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - setType("variables-section"); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/module.properties b/reportbuilder/java/com/sun/star/report/pentaho/module.properties deleted file mode 100644 index ad74ab7b52b3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/module.properties +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - - -module-info: - name: factory-report-sun - producer: The JFreeReport project - www.jfree.org/jfreereport - description: XML-Parsers for OpenOffice.org report definitions. These definitions\ - are basicly similiar to the old JFreeReport format, with some limited absolute\ - positioning capabilities. - version.major: 0 - version.minor: 90 - version.patchlevel: 0 - -depends: - module: org.jfree.report.modules.factories.report.base.ReportFactoryBaseModule - version.major: 0 - version.minor: 92 - version.patchlevel: 0 - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css deleted file mode 100644 index 6c94b1e059fe..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -@namespace url("urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"); - -/** - * All default styles for data-styles elements. -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css deleted file mode 100644 index 341f44ec550e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"); - -/** - * All default styles for draw elements. -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css deleted file mode 100644 index 7c8c43008435..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("urn:oasis:names:tc:opendocument:xmlns:form:1.0"); - -/** - * All default styles for form elements. -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css deleted file mode 100644 index bca51bd6ba8b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -@namespace url("urn:oasis:names:tc:opendocument:xmlns:style:1.0"); - -/** - * All default styles for style elements. (They should not be visible anyway, - * but better be complete than be sorry afterwards.) -*/ - -raw-styles { - display:none; -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css deleted file mode 100644 index 80145880af0f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -@namespace url("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); - -table { - display: table; -} - -table-columns { - display: table-column-group; -} - -table-column { - display: table-column; -} - -table-row { - display: table-row; -} - -table-cell { - display: table-cell; -} - -table-cell[number-cols-spanned], -table-cell[number-cols-spanned], -table-columns[number-cols-spanned], -table-column[number-cols-spanned] { - -x-liblayout-colspan: attr(number-cols-spanned); -} - -table-cell[number-rows-spanned], -table-cell[number-rows-spanned] { - -x-liblayout-rowspan: attr(number-rows-spanned); -} - - - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css b/reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css deleted file mode 100644 index fb85c3d1f938..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -@namespace url("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); - -/** - * All default styles for form elements. -*/ - -p { - display: block; -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer.java b/reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer.java deleted file mode 100644 index e34c585e00a3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer.java +++ /dev/null @@ -1,488 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output; - -import com.sun.star.awt.Size; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ReportExecutionException; -import com.sun.star.report.pentaho.DefaultNameGenerator; - -import java.awt.Image; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; - -import java.sql.Blob; -import java.sql.SQLException; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.layouting.input.style.values.CSSNumericType; -import org.jfree.layouting.input.style.values.CSSNumericValue; - -import org.pentaho.reporting.libraries.base.util.IOUtils; -import org.pentaho.reporting.libraries.base.util.PngEncoder; -import org.pentaho.reporting.libraries.base.util.WaitingImageObserver; - - -/** - * This class manages the images embedded in a report. - * - * @since 31.03.2007 - */ -public class ImageProducer -{ - - private static final Log LOGGER = LogFactory.getLog(ImageProducer.class); - - public static class OfficeImage - { - - private final CSSNumericValue width; - private final CSSNumericValue height; - private final String embeddableLink; - - public OfficeImage(final String embeddableLink, final CSSNumericValue width, final CSSNumericValue height) - { - this.embeddableLink = embeddableLink; - this.width = width; - this.height = height; - } - - public CSSNumericValue getWidth() - { - return width; - } - - public CSSNumericValue getHeight() - { - return height; - } - - public String getEmbeddableLink() - { - return embeddableLink; - } - } - - private static class ByteDataImageKey - { - - private final byte[] keyData; - private Integer hashCode; - - protected ByteDataImageKey(final byte[] keyData) - { - if (keyData == null) - { - throw new NullPointerException(); - } - this.keyData = keyData; - } - - public boolean equals(final Object o) - { - if (this != o) - { - if (o == null || getClass() != o.getClass()) - { - return false; - } - - final ByteDataImageKey key = (ByteDataImageKey) o; - if (!Arrays.equals(keyData, key.keyData)) - { - return false; - } - } - - return true; - } - - public int hashCode() - { - if (hashCode != null) - { - return hashCode; - } - - final int length = Math.min(keyData.length, 512); - int hashValue = 0; - for (int i = 0; i < length; i++) - { - final byte b = keyData[i]; - hashValue = b + hashValue * 23; - } - this.hashCode = hashValue; - return hashValue; - } - } - private final Map imageCache; - private final InputRepository inputRepository; - private final OutputRepository outputRepository; - private final ImageService imageService; - - public ImageProducer(final InputRepository inputRepository, - final OutputRepository outputRepository, - final ImageService imageService) - { - if (inputRepository == null) - { - throw new NullPointerException(); - } - if (outputRepository == null) - { - throw new NullPointerException(); - } - if (imageService == null) - { - throw new NullPointerException(); - } - - this.inputRepository = inputRepository; - this.outputRepository = outputRepository; - this.imageService = imageService; - this.imageCache = new HashMap(); - } - - /** - * Image-Data can be one of the following types: String, URL, URI, byte-array, blob. - * - * @param imageData - * @param preserveIRI - * @return - */ - public OfficeImage produceImage(final Object imageData, - final boolean preserveIRI) - { - - LOGGER.debug("Want to produce image " + imageData); - if (imageData instanceof String) - { - return produceFromString((String) imageData, preserveIRI); - } - - if (imageData instanceof URL) - { - return produceFromURL((URL) imageData, preserveIRI); - } - - if (imageData instanceof Blob) - { - return produceFromBlob((Blob) imageData); - } - - if (imageData instanceof byte[]) - { - return produceFromByteArray((byte[]) imageData); - } - - if (imageData instanceof Image) - { - return produceFromImage((Image) imageData); - } - // not usable .. - return null; - } - - private OfficeImage produceFromImage(final Image image) - { - // quick caching ... use a weak list ... - final WaitingImageObserver obs = new WaitingImageObserver(image); - obs.waitImageLoaded(); - - final PngEncoder encoder = new PngEncoder(image, PngEncoder.ENCODE_ALPHA, PngEncoder.FILTER_NONE, 5); - final byte[] data = encoder.pngEncode(); - return produceFromByteArray(data); - } - - private OfficeImage produceFromBlob(final Blob blob) - { - try - { - final InputStream inputStream = blob.getBinaryStream(); - final int length = (int) blob.length(); - - final ByteArrayOutputStream bout = new ByteArrayOutputStream(length); - try - { - IOUtils.getInstance().copyStreams(inputStream, bout); - } finally - { - inputStream.close(); - } - return produceFromByteArray(bout.toByteArray()); - } - catch (IOException e) - { - LOGGER.warn("Failed to produce image from Blob", e); - } - catch (SQLException e) - { - LOGGER.warn("Failed to produce image from Blob", e); - } - return null; - } - - private OfficeImage produceFromByteArray(final byte[] data) - { - final ByteDataImageKey imageKey = new ByteDataImageKey(data); - final OfficeImage o = imageCache.get(imageKey); - if (o != null) - { - return o; - } - - try - { - final String mimeType = imageService.getMimeType(data); - final Size dims = imageService.getImageSize(data); - - // copy the image into the local output-storage - // todo: Implement data-fingerprinting so that we can detect the mime-type - final OutputRepository storage = outputRepository.openOutputRepository("Pictures", null); - final DefaultNameGenerator nameGenerator = new DefaultNameGenerator(storage); - final String name = nameGenerator.generateName("image", mimeType); - final OutputStream outputStream = storage.createOutputStream(name, mimeType); - final ByteArrayInputStream bin = new ByteArrayInputStream(data); - - try - { - IOUtils.getInstance().copyStreams(bin, outputStream); - } finally - { - outputStream.close(); - storage.closeOutputRepository(); - } - - final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); - final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); - final OfficeImage officeImage = new OfficeImage("Pictures/" + name, widthVal, heightVal); - imageCache.put(imageKey, officeImage); - return officeImage; - } - catch (IOException e) - { - LOGGER.warn("Failed to load image from local input-repository", e); - } - catch (ReportExecutionException e) - { - LOGGER.warn("Failed to create image from local input-repository", e); - } - return null; - } - - private OfficeImage produceFromString(final String source, - final boolean preserveIRI) - { - - try - { - final URL url = new URL(source); - return produceFromURL(url, preserveIRI); - } - catch (MalformedURLException e) - { - // ignore .. but we had to try this .. - } - - final OfficeImage o = imageCache.get(source); - if (o != null) - { - return o; - } - - // Next, check whether this is a local path. - if (inputRepository.isReadable(source)) - { - // cool, the file exists. Let's try to read it. - try - { - final ByteArrayOutputStream bout = new ByteArrayOutputStream(8192); - final InputStream inputStream = inputRepository.createInputStream(source); - try - { - IOUtils.getInstance().copyStreams(inputStream, bout); - } finally - { - inputStream.close(); - } - final byte[] data = bout.toByteArray(); - final Size dims = imageService.getImageSize(data); - final String mimeType = imageService.getMimeType(data); - - final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); - final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); - - final String filename = copyToOutputRepository(mimeType, data); - final OfficeImage officeImage = new OfficeImage(filename, widthVal, heightVal); - imageCache.put(source, officeImage); - return officeImage; - } - catch (IOException e) - { - LOGGER.warn("Failed to load image from local input-repository", e); - } - catch (ReportExecutionException e) - { - LOGGER.warn("Failed to create image from local input-repository", e); - } - } - else - { - try - { - URI rootURI = new URI(inputRepository.getRootURL()); - final URI uri = rootURI.resolve(source); - return produceFromURL(uri.toURL(), preserveIRI); - } - catch (URISyntaxException ex) - { - } - catch (MalformedURLException e) - { - // ignore .. but we had to try this .. - } - } - - // Return the image as broken image instead .. - final OfficeImage officeImage = new OfficeImage(source, null, null); - imageCache.put(source, officeImage); - return officeImage; - } - - private OfficeImage produceFromURL(final URL url, - final boolean preserveIRI) - { - final String urlString = url.toString(); - URI uri = null; - try - { - uri = new URI(urlString); - } - catch (URISyntaxException ex) - { - Logger.getLogger(ImageProducer.class.getName()).log(Level.SEVERE, null, ex); - } - final OfficeImage o = imageCache.get(uri); - if (o != null) - { - return o; - } - - try - { - final ByteArrayOutputStream bout = new ByteArrayOutputStream(8192); - final URLConnection urlConnection = url.openConnection(); - final InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream()); - try - { - IOUtils.getInstance().copyStreams(inputStream, bout); - } finally - { - inputStream.close(); - } - final byte[] data = bout.toByteArray(); - - final Size dims = imageService.getImageSize(data); - final String mimeType = imageService.getMimeType(data); - final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); - final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); - - if (preserveIRI) - { - final OfficeImage retval = new OfficeImage(urlString, widthVal, heightVal); - imageCache.put(uri, retval); - return retval; - } - - final String name = copyToOutputRepository(mimeType, data); - final OfficeImage officeImage = new OfficeImage(name, widthVal, heightVal); - imageCache.put(uri, officeImage); - return officeImage; - } - catch (IOException e) - { - LOGGER.warn("Failed to load image from local input-repository" + e); - } - catch (ReportExecutionException e) - { - LOGGER.warn("Failed to create image from local input-repository" + e); - } - - if (!preserveIRI) - { - final OfficeImage image = new OfficeImage(urlString, null, null); - imageCache.put(uri, image); - return image; - } - - // OK, everything failed; the image is not - repeat it - not usable. - return null; - } - - private String copyToOutputRepository(final String urlMimeType, final byte[] data) - throws IOException, ReportExecutionException - { - final String mimeType; - if (urlMimeType == null) - { - mimeType = imageService.getMimeType(data); - } - else - { - mimeType = urlMimeType; - } - - // copy the image into the local output-storage - final OutputRepository storage = outputRepository.openOutputRepository("Pictures", null); - final DefaultNameGenerator nameGenerator = new DefaultNameGenerator(storage); - final String name = nameGenerator.generateName("image", mimeType); - final OutputStream outputStream = storage.createOutputStream(name, mimeType); - final ByteArrayInputStream bin = new ByteArrayInputStream(data); - - try - { - IOUtils.getInstance().copyStreams(bin, outputStream); - } finally - { - outputStream.close(); - storage.closeOutputRepository(); - } - return "Pictures/" + name; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java b/reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java deleted file mode 100644 index e9b91ada8df8..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java +++ /dev/null @@ -1,1722 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OfficeToken; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.SDBCReportDataFactory; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.layoutprocessor.ImageElementContext; -import com.sun.star.report.pentaho.model.OfficeDocument; -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.styles.LengthCalculator; -import com.sun.star.report.pentaho.styles.StyleMapper; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.DocumentBuilder; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; - -import java.awt.Image; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.io.InputStream; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; -import java.util.zip.DeflaterOutputStream; -import java.util.zip.InflaterInputStream; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.layouting.input.style.parser.CSSValueFactory; -import org.jfree.layouting.input.style.parser.StyleSheetParserUtil; -import org.jfree.layouting.input.style.values.CSSNumericType; -import org.jfree.layouting.input.style.values.CSSNumericValue; -import org.jfree.layouting.layouter.style.CSSValueResolverUtility; -import org.jfree.layouting.namespace.NamespaceDefinition; -import org.jfree.layouting.namespace.Namespaces; -import org.jfree.layouting.util.AttributeMap; -import org.jfree.layouting.util.LazyAttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportBoot; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.AbstractReportTarget; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTargetUtil; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.util.AttributeNameGenerator; -import org.jfree.report.util.IntegerCache; -import org.jfree.report.util.MemoryByteArrayOutputStream; - -import org.pentaho.reporting.libraries.base.util.FastStack; -import org.pentaho.reporting.libraries.base.util.IOUtils; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - -import org.w3c.css.sac.LexicalUnit; - -/** - * Todo: Document me! - * - * @since 08.03.2007 - */ -public abstract class OfficeDocumentReportTarget extends AbstractReportTarget -{ - - protected static final Log LOGGER = LogFactory.getLog(OfficeDocumentReportTarget.class); - public static final String HORIZONTAL_POS = "horizontal-pos"; - public static final String TAG_DEF_PREFIX = "com.sun.star.report.pentaho.output."; - public static final int ROLE_NONE = 0; - public static final int ROLE_REPORT_HEADER = 1; - public static final int ROLE_REPORT_FOOTER = 2; - public static final int ROLE_GROUP_HEADER = 3; - public static final int ROLE_GROUP_FOOTER = 4; - public static final int ROLE_REPEATING_GROUP_HEADER = 5; - public static final int ROLE_REPEATING_GROUP_FOOTER = 6; - public static final int ROLE_PAGE_HEADER = 7; - public static final int ROLE_PAGE_FOOTER = 8; - public static final int ROLE_DETAIL = 9; - public static final int ROLE_VARIABLES = 10; - public static final int ROLE_TEMPLATE = 11; - public static final int ROLE_SPREADSHEET_PAGE_HEADER = 12; - public static final int ROLE_SPREADSHEET_PAGE_FOOTER = 13; - public static final int STATE_IN_DOCUMENT = 0; - public static final int STATE_IN_BODY = 1; - public static final int STATE_IN_CONTENT = 2; - public static final int STATE_IN_GROUP = 3; - public static final int STATE_IN_GROUP_BODY = 4; - public static final int STATE_IN_SECTION = 5; - public static final int STATE_IN_OTHER = 6; - public static final int STATE_IN_GROUP_INSTANCE = 7; - public static final String FAILED = "Failed"; - public static final String VERTICAL_POS = "vertical-pos"; - private static final String ZERO_CM = "0cm"; - /** the verison of the ODF specification to which generated documents - * shall conform. */ - public static final String ODF_VERSION = "1.2"; - - protected static class BufferState - { - - private final XmlWriter xmlWriter; - private final MemoryByteArrayOutputStream xmlBuffer; - private final OfficeStylesCollection stylesCollection; - - protected BufferState(final XmlWriter xmlWriter, - final MemoryByteArrayOutputStream xmlBuffer, - final OfficeStylesCollection stylesCollection) - { - this.stylesCollection = stylesCollection; - this.xmlWriter = xmlWriter; - this.xmlBuffer = xmlBuffer; - } - - public OfficeStylesCollection getStylesCollection() - { - return stylesCollection; - } - - public XmlWriter getXmlWriter() - { - return xmlWriter; - } - - public String getXmlBuffer() throws ReportProcessingException - { - try - { - final byte[] zippedData = xmlBuffer.getRaw(); - final InputStreamReader reader = new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(zippedData, 0, xmlBuffer.getLength())), "UTF-16"); - final StringWriter writer = new StringWriter((zippedData.length / 2) + 1); - IOUtils.getInstance().copyWriter(reader, writer); - return writer.toString(); - } - catch (IOException e) - { - throw new ReportProcessingException("Failed to copy buffer", e); - } - } - - public Reader getXmlAsReader() throws ReportProcessingException - { - try - { - final byte[] zippedData = xmlBuffer.getRaw(); - return new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(zippedData, 0, xmlBuffer.getLength())), "UTF-16"); - } - catch (IOException e) - { - throw new ReportProcessingException("Failed to copy buffer", e); - } - } - } - - protected static class GroupContext - { - - private final GroupContext parent; - private int iterationCount; - private boolean groupWithRepeatingSection; - - protected GroupContext(final GroupContext parent) - { - this.parent = parent; - } - - public GroupContext getParent() - { - return parent; - } - - public int getIterationCount() - { - return iterationCount; - } - - public void setIterationCount(final int iterationCount) - { - this.iterationCount = iterationCount; - } - - public boolean isGroupWithRepeatingSection() - { - return groupWithRepeatingSection; - } - - public void setGroupWithRepeatingSection(final boolean groupWithRepeatingSection) - { - this.groupWithRepeatingSection = groupWithRepeatingSection; - } - - public String toString() - { - return "GroupContext{" + "parent=" + parent + ", iterationCount=" + iterationCount + ", groupWithRepeatingSection=" + groupWithRepeatingSection + '}'; - } - } - private final FastStack states; - private int currentRole; - private final FastStack xmlWriters; - private XmlWriter rootXmlWriter; - /** - * This styles-collection contains all styles that were predefined in the report definition file. The common styles - * and the master-styles will be written unmodified, the automatic styles will be ignored. - */ - private OfficeStylesCollection predefinedStylesCollection; - /** - * This styles-collection contains all master-styles that have been generated by the report definition process. It - * also contains all automatic styles that have been generated for the page-bands (and the pagebands as well). - */ - private OfficeStylesCollection globalStylesCollection; - /** - * The content styles collection contains all automatic styles that have been generated for the normal-flow content. - */ - private OfficeStylesCollection contentStylesCollection; - private final OutputRepository outputRepository; - private final InputRepository inputRepository; - private final AttributeNameGenerator tableNameGenerator; - private final AttributeNameGenerator frameNameGenerator; - private final AttributeNameGenerator autoStyleNameGenerator; - private final String target; - private static final int INITIAL_BUFFER_SIZE = 40960; - private StyleMapper styleMapper; - private StyleSheetParserUtil styleSheetParserUtil; - private final AttributeNameGenerator imageNames; - private final ImageProducer imageProducer; - private final OleProducer oleProducer; - private GroupContext groupContext; - private static final boolean DEBUG_ELEMENTS = - JFreeReportBoot.getInstance().getExtendedConfig().getBoolProperty("com.sun.star.report.pentaho.output.DebugElements"); - - protected OfficeDocumentReportTarget(final ReportJob reportJob, - final ResourceManager resourceManager, - final ResourceKey baseResource, - final InputRepository inputRepository, - final OutputRepository outputRepository, - final String target, - final ImageService imageService, - final DataSourceFactory datasourcefactory) - throws ReportProcessingException - { - super(reportJob, resourceManager, baseResource); - if (imageService == null) - { - throw new NullPointerException("ImageService must not be null"); - } - if (target == null) - { - throw new NullPointerException("Target-Name must not be null"); - } - - this.target = target; - - this.tableNameGenerator = new AttributeNameGenerator(); - this.frameNameGenerator = new AttributeNameGenerator(); - this.autoStyleNameGenerator = new AttributeNameGenerator(); - this.outputRepository = outputRepository; - this.inputRepository = inputRepository; - this.states = new FastStack(); - this.xmlWriters = new FastStack(); - this.imageNames = new AttributeNameGenerator(); - - this.imageProducer = new ImageProducer(inputRepository, outputRepository, imageService); - this.oleProducer = new OleProducer(inputRepository, outputRepository, imageService, datasourcefactory, (Integer) reportJob.getParameters().get(ReportEngineParameterNames.MAXROWS)); - - try - { - final ResourceManager realResourceManager = getResourceManager(); - styleMapper = StyleMapper.loadInstance(realResourceManager); - } - catch (ResourceException e) - { - throw new ReportProcessingException("Failed to load style-mapper", e); - } - } - - protected abstract String getTargetMimeType(); - - protected OutputRepository getOutputRepository() - { - return outputRepository; - } - - protected InputRepository getInputRepository() - { - return inputRepository; - } - - /** - * Starts the output of a new office document. This method writes the generic 'office:document-content' tag along with - * all known namespace declarations. - * - * @param report the report object. - * @throws DataSourceException if there was an error accessing the datasource - * @throws ReportProcessingException if some other error occured. - */ - public void startReport(final ReportStructureRoot report) - throws DataSourceException, ReportProcessingException - { - imageNames.reset(); - this.groupContext = new GroupContext(null); - - final DefaultTagDescription tagDescription = createTagDescription(); - try - { - final OutputStream outputStream = outputRepository.createOutputStream(target, "text/xml"); - final Writer writer = new OutputStreamWriter(outputStream, "UTF-8"); - - this.rootXmlWriter = new XmlWriter(writer, tagDescription); - this.rootXmlWriter.setAlwaysAddNamespace(true); - - final AttributeList rootAttributes = new AttributeList(); - rootAttributes.addNamespaceDeclaration("office", OfficeNamespaces.OFFICE_NS); - rootAttributes.addNamespaceDeclaration("style", OfficeNamespaces.STYLE_NS); - rootAttributes.addNamespaceDeclaration("text", OfficeNamespaces.TEXT_NS); - rootAttributes.addNamespaceDeclaration("table", OfficeNamespaces.TABLE_NS); - rootAttributes.addNamespaceDeclaration("draw", OfficeNamespaces.DRAWING_NS); - rootAttributes.addNamespaceDeclaration("fo", OfficeNamespaces.FO_NS); - rootAttributes.addNamespaceDeclaration("xlink", OfficeNamespaces.XLINK_NS); - rootAttributes.addNamespaceDeclaration("dc", OfficeNamespaces.PURL_NS); - rootAttributes.addNamespaceDeclaration("meta", OfficeNamespaces.META_NS); - rootAttributes.addNamespaceDeclaration("number", OfficeNamespaces.DATASTYLE_NS); - rootAttributes.addNamespaceDeclaration("svg", OfficeNamespaces.SVG_NS); - rootAttributes.addNamespaceDeclaration("chart", OfficeNamespaces.CHART_NS); - rootAttributes.addNamespaceDeclaration("chartooo", OfficeNamespaces.CHARTOOO_NS); - rootAttributes.addNamespaceDeclaration("dr3d", OfficeNamespaces.DR3D_NS); - rootAttributes.addNamespaceDeclaration("math", OfficeNamespaces.MATHML_NS); - rootAttributes.addNamespaceDeclaration("form", OfficeNamespaces.FORM_NS); - rootAttributes.addNamespaceDeclaration("script", OfficeNamespaces.SCRIPT_NS); - rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); - rootAttributes.addNamespaceDeclaration("ooow", OfficeNamespaces.OOW2004_NS); - rootAttributes.addNamespaceDeclaration("oooc", OfficeNamespaces.OOC2004_NS); - rootAttributes.addNamespaceDeclaration("dom", OfficeNamespaces.XML_EVENT_NS); - rootAttributes.addNamespaceDeclaration("xforms", OfficeNamespaces.XFORMS_NS); - rootAttributes.addNamespaceDeclaration("xsd", OfficeNamespaces.XSD_NS); - rootAttributes.addNamespaceDeclaration("xsi", OfficeNamespaces.XSI_NS); - rootAttributes.addNamespaceDeclaration("grddl", OfficeNamespaces.GRDDL_NS); - rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", - ODF_VERSION); - - this.rootXmlWriter.writeXmlDeclaration("UTF-8"); - this.rootXmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "document-content", rootAttributes, XmlWriterSupport.OPEN); - - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_DOCUMENT)); - - autoStyleNameGenerator.reset(); - tableNameGenerator.reset(); - frameNameGenerator.reset(); - - final OfficeDocument reportDoc = (OfficeDocument) report; - predefinedStylesCollection = reportDoc.getStylesCollection(); - - final OfficeStyles commonStyles = predefinedStylesCollection.getCommonStyles(); - if (!commonStyles.containsStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS)) - { - final OfficeStyle graphicsDefaultStyle = new OfficeStyle(); - graphicsDefaultStyle.setStyleFamily(OfficeToken.GRAPHIC); - graphicsDefaultStyle.setStyleName(OfficeToken.GRAPHICS); - final Element graphicProperties = produceFirstChild(graphicsDefaultStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); - graphicProperties.setAttribute(OfficeNamespaces.TEXT_NS, "anchor-type", OfficeToken.PARAGRAPH); - graphicProperties.setAttribute(OfficeNamespaces.SVG_NS, "x", ZERO_CM); - graphicProperties.setAttribute(OfficeNamespaces.SVG_NS, "y", ZERO_CM); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "wrap", "dynamic"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "number-wrapped-paragraphs", "no-limit"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "wrap-contour", OfficeToken.FALSE); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, VERTICAL_POS, "from-top"); // changed for chart - - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-rel", OfficeToken.PARAGRAPH); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, HORIZONTAL_POS, "from-left"); // changed for chart - - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "horizontal-rel", OfficeToken.PARAGRAPH); - commonStyles.addStyle(graphicsDefaultStyle); - } - - // Make sure that later generated styles do not overwrite existing styles. - fillStyleNameGenerator(predefinedStylesCollection); - - contentStylesCollection = new OfficeStylesCollection(); - globalStylesCollection = new OfficeStylesCollection(); - - startBuffering(contentStylesCollection, true); - } - catch (IOException e) - { - throw new ReportProcessingException(FAILED, e); - } - } - - protected AttributeNameGenerator getAutoStyleNameGenerator() - { - return autoStyleNameGenerator; - } - - private void fillStyleNameGenerator(final OfficeStylesCollection stylesCollection) - { - final OfficeStyles commonStyles = stylesCollection.getCommonStyles(); - final OfficeStyle[] allCommonStyles = commonStyles.getAllStyles(); - for (int i = 0; i < allCommonStyles.length; i++) - { - final OfficeStyle style = allCommonStyles[i]; - autoStyleNameGenerator.generateName(style.getStyleName()); - } - - final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); - final OfficeStyle[] allAutoStyles = autoStyles.getAllStyles(); - for (int i = 0; i < allAutoStyles.length; i++) - { - final OfficeStyle style = allAutoStyles[i]; - autoStyleNameGenerator.generateName(style.getStyleName()); - } - } - - public OfficeStylesCollection getPredefinedStylesCollection() - { - return predefinedStylesCollection; - } - - public OfficeStylesCollection getGlobalStylesCollection() - { - return globalStylesCollection; - } - - public OfficeStylesCollection getContentStylesCollection() - { - return contentStylesCollection; - } - - /** - * Returns the XML-Writer tag description. This description defines whether an element can have character data inside. - * Such element will disable the indention, as in that case the additional whitespaces might alter the meaning of the - * element's contents. - * - * @return the tag description library. - */ - protected DefaultTagDescription createTagDescription() - { - final DefaultTagDescription tagDescription = new DefaultTagDescription(); - tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), - OfficeDocumentReportTarget.TAG_DEF_PREFIX); - return tagDescription; - } - - /** - * Returns the current processing state. - * - * @return the processing state. - */ - protected int getCurrentState() - { - if (states.isEmpty()) - { - throw new IllegalStateException(); - } - final Integer o = (Integer) states.peek(); - return o; - } - - /** - * Starts the processing of an element and updates the processing state. This will select an apropriate handler method - * for the call and will call one of the start* methods. - * - * @param roAttrs the attribute map for the current element - * @throws DataSourceException - * @throws ReportProcessingException - */ - public final void startElement(final AttributeMap roAttrs) - throws DataSourceException, ReportProcessingException - { - final AttributeMap attrs = new LazyAttributeMap(roAttrs); - // todo - if (DEBUG_ELEMENTS) - { - LOGGER.debug("Starting " + getCurrentState() + '/' + states.size() + ' ' + ReportTargetUtil.getNamespaceFromAttribute(attrs) + " -> " + ReportTargetUtil.getElemenTypeFromAttribute(attrs)); - } - try - { - switch (getCurrentState()) - { - case OfficeDocumentReportTarget.STATE_IN_DOCUMENT: - { - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OFFICE_NS, "body", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_BODY)); - startBody(attrs); - } - else - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); - if (!isFilteredNamespace(ReportTargetUtil.getNamespaceFromAttribute(attrs))) - { - startOther(attrs); - } - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_BODY: - { - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OFFICE_NS, "report", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_CONTENT)); - startContent(attrs); - } - else - { - throw new IllegalStateException("The 'office:body' element must have exactly one child of type 'report'"); - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_CONTENT: - { - // Either a ordinary section or a group .. - // A group. - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "report-body", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_BODY)); - startGroupBody(attrs); - } - else - { - // Either a template-section, page-header, page-footer, report-header, report-footer - // or variables-section - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "template", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_TEMPLATE; - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "page-header", attrs)) - { - if ("spreadsheet-section".equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role"))) - { - currentRole = OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER; - } - else - { - currentRole = OfficeDocumentReportTarget.ROLE_PAGE_HEADER; - } - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "page-footer", attrs)) - { - if ("spreadsheet-section".equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role"))) - { - currentRole = OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER; - } - else - { - currentRole = OfficeDocumentReportTarget.ROLE_PAGE_FOOTER; - } - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "report-header", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_REPORT_HEADER; - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "report-footer", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_REPORT_FOOTER; - } - else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; - } - else - { - throw new IllegalStateException("Expected either 'template', 'report-body', " + "'report-header', 'report-footer', 'variables-section', 'page-header' or 'page-footer'"); - } - startReportSection(attrs, currentRole); - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP_BODY: - { - // We now expect either an other group or a detail band. - - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP)); - groupContext = new GroupContext(groupContext); - startGroup(attrs); - } - else - { - // Either a variables-section, or a detail-band - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "detail", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_DETAIL; - } - else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; - } - else - { - throw new IllegalStateException("Expected either 'group', 'detail' or 'variables-section'"); - } - startReportSection(attrs, currentRole); - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP: - { - // A group can carry a repeating group header/footer or a group-instance section. - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "group-instance", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE)); - startGroupInstance(attrs); - } - else - { - // repeating group header/footer, but *no* variables section - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-header", attrs) && OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section"))) - { - currentRole = OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER; - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-footer", attrs) && OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section"))) - { - currentRole = OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER; - } - else - { - throw new IllegalStateException("Expected either 'group-instance', " + "'repeating group-header' or 'repeating group-footer'"); - } - startReportSection(attrs, currentRole); - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE: - { - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "group-body", attrs)) - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_BODY)); - startGroupBody(attrs); - } - else - { - // Either a group-header or group-footer or variables-section - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-header", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_GROUP_HEADER; - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-footer", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_GROUP_FOOTER; - } - else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) - { - currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; - } - else - { - throw new IllegalStateException("Expected either 'group-body', 'group-header', 'group-footer' or 'variables-section'"); - } - startReportSection(attrs, currentRole); - } - break; - } - case OfficeDocumentReportTarget.STATE_IN_SECTION: - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); - startOther(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_OTHER: - { - states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); - startOther(attrs); - break; - } - default: - throw new IllegalStateException("Failure: " + getCurrentState()); - } - } - catch (IOException ioe) - { - LOGGER.error("ReportProcessing failed", ioe); - throw new ReportProcessingException("Failed to write content", ioe); - } -// finally -// { -// LOGGER.debug ("Started " + getNamespaceFromAttribute(attrs) + ":" + -// getElemenTypeFromAttribute(attrs) + " -> " + getCurrentState()); -// } - } - - protected GroupContext getGroupContext() - { - return groupContext; - } - - protected void performStyleProcessing(final AttributeMap attrs) - throws ReportProcessingException - { - final OfficeStylesCollection stylesCollection = getStylesCollection(); - final OfficeStylesCollection predefCollection = getPredefinedStylesCollection(); - final OfficeStylesCollection globalStylesCollection = getGlobalStylesCollection(); - - final String elementNamespace = - ReportTargetUtil.getNamespaceFromAttribute(attrs); - final String elementName = - ReportTargetUtil.getElemenTypeFromAttribute(attrs); - - final String[] namespaces = attrs.getNameSpaces(); - for (int i = 0; i < namespaces.length; i++) - { - final String attrNamespace = namespaces[i]; - if (isFilteredNamespace(attrNamespace)) - { - continue; - } - - final Map attributes = attrs.getAttributes(attrNamespace); - final Iterator iterator = attributes.entrySet().iterator(); - while (iterator.hasNext()) - { - final Map.Entry entry = (Map.Entry) iterator.next(); - final String attrName = (String) entry.getKey(); - final String attrValue = String.valueOf(entry.getValue()); - - final String styleFamily = styleMapper.getStyleFamilyFor(elementNamespace, elementName, attrNamespace, attrName); - if (styleFamily == null) - { - // None of the known style attributes. - continue; - } - - if (styleMapper.isListOfStyles(elementNamespace, elementName, attrNamespace, attrName)) - { - // ignored for now. - LOGGER.warn("List of styles is not yet implemented."); - continue; - } - - // Copy styles is only called once per style. - StyleUtilities.copyStyle(styleFamily, attrValue, stylesCollection, globalStylesCollection, predefCollection); - } - } - } - - protected void startBody(final AttributeMap attrs) - throws IOException - { - getXmlWriter().writeTag(OfficeNamespaces.OFFICE_NS, "body", XmlWriterSupport.OPEN); - } - - private final boolean allowBuffering(final int role) - { - return (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER || role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_TEMPLATE); - } - - protected void startReportSection(final AttributeMap attrs, final int role) - throws IOException, DataSourceException, ReportProcessingException - { - if (allowBuffering(role)) - { - startBuffering(new OfficeStylesCollection(), true); - } - } - - protected abstract void startContent(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException; - - protected void startGroup(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - final Object repeatingHeaderOrFooter = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer"); - if (OfficeToken.TRUE.equals(repeatingHeaderOrFooter)) - { - getGroupContext().setGroupWithRepeatingSection(true); - } - - final Object iterationCount = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "iteration-count"); - if (iterationCount instanceof Number) - { - final Number itNumber = (Number) iterationCount; - getGroupContext().setIterationCount(itNumber.intValue()); - } - } - - protected void startGroupInstance(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected void startGroupBody(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected abstract void startOther(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException; - - public void processText(final String text) - throws DataSourceException, ReportProcessingException - { - try - { - final XmlWriter xmlWriter = getXmlWriter(); - final BufferedReader br = new BufferedReader(new StringReader(text)); - String line = br.readLine(); - while (line != null) - { - xmlWriter.writeTextNormalized(line, false); - line = br.readLine(); - if (line != null) - { - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, "line-break", XmlWriterSupport.CLOSE); - } - } - } - catch (IOException e) - { - throw new ReportProcessingException(FAILED, e); - } - } - - protected boolean isFilteredNamespace(final String namespace) - { - if (Namespaces.LIBLAYOUT_NAMESPACE.equals(namespace)) - { - return true; - } - if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) - { - return true; - } - if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) - { - return true; - } - if (JFreeReportInfo.COMPATIBILITY_NAMESPACE.equals(namespace)) - { - return true; - } - if (OfficeNamespaces.OOREPORT_NS.equals(namespace)) - { - return true; - } - return false; - } - - public void processContent(final DataFlags value) - throws DataSourceException, ReportProcessingException - { - final Object rawvalue = value.getValue(); - if (rawvalue == null) - { - return; - } - - // special handler for image (possibly also for URL ..) - if (rawvalue instanceof Image) - { - // do nothing yet. We should define something for that later .. - return; - } - - final XmlWriter xmlWriter = getXmlWriter(); - final String text = String.valueOf(rawvalue); - try - { - final BufferedReader br = new BufferedReader(new StringReader(text)); - String line = br.readLine(); - while (line != null) - { - xmlWriter.writeTextNormalized(line, false); - line = br.readLine(); - if (line != null) - { - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, "line-break", XmlWriterSupport.CLOSE); - } - } - } - catch (IOException e) - { - throw new ReportProcessingException(FAILED, e); - } - } - - public final void endElement(final AttributeMap roAttrs) - throws DataSourceException, ReportProcessingException - { - final AttributeMap attrs = new LazyAttributeMap(roAttrs); - // final int oldState = getCurrentState(); - try - { - - switch (getCurrentState()) - { - case OfficeDocumentReportTarget.STATE_IN_OTHER: - { - endOther(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_SECTION: - { - endReportSection(attrs, currentRole); - currentRole = OfficeDocumentReportTarget.ROLE_NONE; - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP: - { - endGroup(attrs); - groupContext = groupContext.getParent(); - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE: - { - endGroupInstance(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_GROUP_BODY: - { - endGroupBody(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_CONTENT: - { - endContent(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_BODY: - { - endBody(attrs); - break; - } - case OfficeDocumentReportTarget.STATE_IN_DOCUMENT: - { - throw new IllegalStateException("This cannot be."); - } - default: - { - throw new IllegalStateException("Invalid state encountered."); - } - } - } - catch (IOException ioe) - { - throw new ReportProcessingException("IO Error while writing content", - ioe); - } finally - { - states.pop(); - - if (DEBUG_ELEMENTS) - { - LOGGER.debug("Finished " + getCurrentState() + "/" + states.size() + " " + ReportTargetUtil.getNamespaceFromAttribute(attrs) + ":" + ReportTargetUtil.getElemenTypeFromAttribute(attrs)); - } - - } - } - - protected void endGroupBody(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected void endGroupInstance(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - } - - public int getCurrentRole() - { - return currentRole; - } - - protected abstract void endOther(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException; - - protected void endReportSection(final AttributeMap attrs, - final int role) - throws IOException, DataSourceException, ReportProcessingException - { - if (allowBuffering(role)) - { - finishBuffering(); - } - } - - protected void endGroup(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected abstract void endContent(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException; - - protected void endBody(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - getXmlWriter().writeCloseTag(); - } - - public void copyMeta() - { - // now copy the meta.xml - if (getInputRepository().isReadable("meta.xml")) - { - InputStream inputStream = null; - try - { - inputStream = getInputRepository().createInputStream("meta.xml"); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document document = dBuilder.parse(new InputSource(inputStream)); - - NodeList nl = document.getElementsByTagName("document-meta/meta/generator"); - Node node = document.getFirstChild().getFirstChild().getFirstChild().getFirstChild(); - String creator = node.getNodeValue(); - node.setNodeValue(creator + "/report_builder"); - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - - final OutputStream outputMetaStream = getOutputRepository().createOutputStream("meta.xml", "text/xml"); - StreamResult result = new StreamResult(outputMetaStream); - DOMSource source = new DOMSource(document); - transformer.transform(source, result); - - //IOUtils.getInstance().copyStreams(inputStream, outputMetaStream); - outputMetaStream.flush(); - outputMetaStream.close(); - } - catch (java.lang.Exception ex) - { - } finally - { - if (inputStream != null) - { - try - { - inputStream.close(); - } - catch (IOException ex) - { - Logger.getLogger(OfficeDocumentReportTarget.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - } - } - - public void endReport(final ReportStructureRoot report) - throws DataSourceException, ReportProcessingException - { - if (xmlWriters.size() != 1) - { - throw new IllegalStateException("Invalid writer-stack state"); - } - - try - { - final StylesWriter inlineStylesWriter = new StylesWriter(rootXmlWriter); - inlineStylesWriter.writeContentStyles(predefinedStylesCollection, contentStylesCollection); - - final BufferState state = finishBuffering(); - this.rootXmlWriter.writeStream(state.getXmlAsReader()); - - final OutputStream stylesOutStream = - outputRepository.createOutputStream("styles.xml", "text/xml"); - final OutputStreamWriter osw = - new OutputStreamWriter(stylesOutStream, "UTF-8"); - final StylesWriter stylesWriter = new StylesWriter(osw); - stylesWriter.writeGlobalStyles(predefinedStylesCollection, globalStylesCollection); - stylesWriter.close(); - - this.rootXmlWriter.writeCloseTag(); - this.rootXmlWriter.close(); - } - catch (IOException e) - { - throw new ReportProcessingException(FAILED, e); - } - } - - public XmlWriter getXmlWriter() - { - final BufferState bufferState = (BufferState) xmlWriters.peek(); - return bufferState.getXmlWriter(); - } - - public OfficeStylesCollection getStylesCollection() - { - final BufferState bufferState = (BufferState) xmlWriters.peek(); - return bufferState.getStylesCollection(); - } - - public void startBuffering(final OfficeStylesCollection stylesCollection, - final boolean indent) throws ReportProcessingException - { - final XmlWriter currentWriter; - if (xmlWriters.isEmpty()) - { - currentWriter = rootXmlWriter; - } - else - { - final BufferState bufferState = (BufferState) xmlWriters.peek(); - currentWriter = bufferState.getXmlWriter(); - } - - try - { - final MemoryByteArrayOutputStream out = - new MemoryByteArrayOutputStream(INITIAL_BUFFER_SIZE, 256 * INITIAL_BUFFER_SIZE); - final DeflaterOutputStream deflateOut = new DeflaterOutputStream(out); - final OutputStreamWriter xmlBuffer = new OutputStreamWriter(deflateOut, "UTF-16"); - // final StringWriter xmlBuffer = new StringWriter - // (OfficeDocumentReportTarget.INITIAL_BUFFER_SIZE); - final XmlWriter contentXmlWriter = new XmlWriter(xmlBuffer, createTagDescription()); - contentXmlWriter.copyNamespaces(currentWriter); - if (indent) - { - contentXmlWriter.setAdditionalIndent(currentWriter.getCurrentIndentLevel()); - contentXmlWriter.setWriteFinalLinebreak(true); - } - else - { - contentXmlWriter.setWriteFinalLinebreak(false); - } - contentXmlWriter.setAlwaysAddNamespace(true); - xmlWriters.push(new BufferState(contentXmlWriter, out, stylesCollection)); - } - catch (IOException ioe) - { - throw new ReportProcessingException("Unable to create the buffer", ioe); - } - } - - public BufferState finishBuffering() throws ReportProcessingException - { - final BufferState state = (BufferState) xmlWriters.pop(); - try - { - state.getXmlWriter().close(); - } - catch (IOException e) - { - LOGGER.error("ReportProcessing failed", e); - } - return state; - } - - public void commit() - throws ReportProcessingException - { - // do not call flush before the report is fully finished. Every flush - // causes the Office-Backend to fully ZIP all contents (it acts like a - // 'Save' call from the UI) and that's expensive like hell - } - - public NamespaceDefinition getNamespaceByUri(final String uri) - { - return null; - } - - protected AttributeList buildAttributeList(final AttributeMap attrs) - { - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - final AttributeList attrList = new AttributeList(); - final String[] namespaces = attrs.getNameSpaces(); - for (int i = 0; i < namespaces.length; i++) - { - final String attrNamespace = namespaces[i]; - if (isFilteredNamespace(attrNamespace)) - { - continue; - } - - final Map localAttributes = attrs.getAttributes(attrNamespace); - final Iterator entries = localAttributes.entrySet().iterator(); - while (entries.hasNext()) - { - final Map.Entry entry = (Map.Entry) entries.next(); - final String key = String.valueOf(entry.getKey()); - if (OfficeNamespaces.TABLE_NS.equals(attrNamespace) && "name".equals(key)) - { - final String tableName = String.valueOf(entry.getValue()); - final String saneName = sanitizeName(tableName); - attrList.setAttribute(attrNamespace, key, - tableNameGenerator.generateName(saneName)); - } - else if (OfficeNamespaces.DRAWING_NS.equals(attrNamespace) && "name".equals(key) && !"equation".equals(elementType)) - { - final String objectName = String.valueOf(entry.getValue()); - attrList.setAttribute(attrNamespace, key, - frameNameGenerator.generateName(objectName)); - } - else - { - attrList.setAttribute(attrNamespace, key, String.valueOf(entry.getValue())); - } - } - } - return attrList; - } - - protected String sanitizeName(final String name) - { - // A table name cannot contain spaces and should only contain - // ascii-characters. - if (name == null) - { - return ""; - } - final char[] chars = name.toCharArray(); - final StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < chars.length; i++) - { - final char aChar = chars[i]; - if (Character.isWhitespace(aChar)) - { - buffer.append('_'); - } - else - { - buffer.append(aChar); - } - } - return buffer.toString(); - } - - /** - * Returns the length in point. This method is f**king slow, it eats half of the processing time. I surely should - * replace it with something more efficient later. - * - * @param text - * @return - */ - protected CSSNumericValue parseLength(final String text) - { - if (styleSheetParserUtil == null) - { - styleSheetParserUtil = StyleSheetParserUtil.getInstance(); - } - - final LexicalUnit cssValue = styleSheetParserUtil.parseLexicalStyleValue( - text); - return CSSValueFactory.createLengthValue(cssValue); - } - - protected boolean isRepeatingSection() - { - return (currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER || currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER || currentRole == OfficeDocumentReportTarget.ROLE_PAGE_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_VARIABLES); - - } - - protected OfficeStyle deriveStyle(final String styleFamily, final String styleName) - throws ReportProcessingException - { - // autogenerate a style. The style has already been added to the current - // auto-collection. - final OfficeStyle style = StyleUtilities.deriveStyle(styleFamily, styleName, - getStylesCollection(), getGlobalStylesCollection(), - getPredefinedStylesCollection(), getAutoStyleNameGenerator()); - return style; - } - - protected void startImageProcessing(final AttributeMap attrs) - throws ReportProcessingException - { - final Object imageData = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.IMAGE_DATA); - final boolean preserveIRI = OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.PRESERVE_IRI)); - - // for the first shot, do nothing fancy .. - final ImageProducer.OfficeImage image = imageProducer.produceImage(imageData, preserveIRI); - if (image != null) - { - final ImageElementContext imageContext = (ImageElementContext) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "image-context"); - - // When scaling, we have to create an image-style. - final CSSNumericValue width = image.getWidth(); // always in 100th of a mm - - final CSSNumericValue height = image.getHeight(); // always in 100th of a mm - - LOGGER.debug("Image " + imageData + " Width: " + width + ", Height: " + height); - if (width == null || height == null) - { - return; - } - - CSSNumericValue imageAreaWidthVal; - CSSNumericValue imageAreaHeightVal; - CSSNumericValue posX = CSSNumericValue.createValue(CSSNumericType.CM, 0.0); - CSSNumericValue posY = CSSNumericValue.createValue(CSSNumericType.CM, 0.0); - - String styleName = null; - if (imageContext != null) - { - imageAreaWidthVal = computeImageWidth(imageContext); - imageAreaHeightVal = computeImageHeight(imageContext); - - if (imageAreaWidthVal == null || imageAreaHeightVal == null) - { - LOGGER.debug("Image data returned from context is invalid. Maybe this is not an image?"); - return; - } - else - { - // compute the clip-area .. - final CSSNumericValue normalizedImageWidth = - CSSValueResolverUtility.convertLength(width, imageAreaWidthVal.getType()); - final CSSNumericValue normalizedImageHeight = - CSSValueResolverUtility.convertLength(height, imageAreaHeightVal.getType()); - - final String scale = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.SCALE); - if (OfficeToken.NONE.equals(scale) && normalizedImageWidth.getValue() > 0 && normalizedImageHeight.getValue() > 0) - { - final double clipWidth = normalizedImageWidth.getValue() - imageAreaWidthVal.getValue(); - final double clipHeight = normalizedImageHeight.getValue() - imageAreaHeightVal.getValue(); - if (clipWidth > 0 && clipHeight > 0) - { - final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); - final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); - final StringBuffer buffer = new StringBuffer(); - buffer.append("rect("); - buffer.append(clipHeight / 2); - buffer.append(imageAreaHeightVal.getType().getType()); - buffer.append(' '); - buffer.append(clipWidth / 2); - buffer.append(imageAreaWidthVal.getType().getType()); - buffer.append(' '); - buffer.append(clipHeight / 2); - buffer.append(imageAreaHeightVal.getType().getType()); - buffer.append(' '); - buffer.append(clipWidth / 2); - buffer.append(imageAreaWidthVal.getType().getType()); - buffer.append(')'); - graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); - - styleName = imageStyle.getStyleName(); - getStylesCollection().getAutomaticStyles().addStyle(imageStyle); - } - else if (clipWidth > 0) - { - final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); - final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); - final StringBuffer buffer = new StringBuffer(); - buffer.append("rect(0cm "); - buffer.append(clipWidth / 2); - buffer.append(imageAreaWidthVal.getType().getType()); - buffer.append(" 0cm "); - buffer.append(clipWidth / 2); - buffer.append(imageAreaWidthVal.getType().getType()); - buffer.append(')'); - graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); - - styleName = imageStyle.getStyleName(); - getStylesCollection().getAutomaticStyles().addStyle(imageStyle); - imageAreaHeightVal = normalizedImageHeight; - } - else if (clipHeight > 0) - { - final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); - final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); - final StringBuffer buffer = new StringBuffer(); - buffer.append("rect("); - buffer.append(clipHeight / 2); - buffer.append(imageAreaHeightVal.getType().getType()); - buffer.append(" 0cm "); - buffer.append(clipHeight / 2); - buffer.append(imageAreaHeightVal.getType().getType()); - buffer.append(" 0cm)"); - graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); - - styleName = imageStyle.getStyleName(); - getStylesCollection().getAutomaticStyles().addStyle(imageStyle); - imageAreaWidthVal = normalizedImageWidth; - } - else - { - imageAreaWidthVal = normalizedImageWidth; - imageAreaHeightVal = normalizedImageHeight; - } - } - else if (OfficeToken.ISOTROPIC.equals(scale)) - { - final double[] ret = calcPaintSize(imageAreaWidthVal, imageAreaHeightVal, normalizedImageWidth, normalizedImageHeight); - - posX = CSSNumericValue.createValue(imageAreaWidthVal.getType(), (imageAreaWidthVal.getValue() - ret[0]) * 0.5); - posY = CSSNumericValue.createValue(imageAreaHeightVal.getType(), (imageAreaHeightVal.getValue() - ret[1]) * 0.5); - - imageAreaWidthVal = CSSNumericValue.createValue(imageAreaWidthVal.getType(), ret[0]); - imageAreaHeightVal = CSSNumericValue.createValue(imageAreaHeightVal.getType(), ret[1]); - } - } - // If we do scale, then we simply use the given image-area-size as valid image size and dont - // care about the image itself .. - } - else - { - LOGGER.debug("There is no image-context, so we have to rely on the image's natural bounds. " + "This may go awfully wrong."); - imageAreaWidthVal = image.getWidth(); - imageAreaHeightVal = image.getHeight(); - } - - final AttributeList frameList = new AttributeList(); - frameList.setAttribute(OfficeNamespaces.DRAWING_NS, "name", imageNames.generateName("Image")); - if (styleName != null) - { - frameList.setAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME, styleName); - } - frameList.setAttribute(OfficeNamespaces.TEXT_NS, "anchor-type", OfficeToken.PARAGRAPH); - frameList.setAttribute(OfficeNamespaces.SVG_NS, "z-index", "0"); - frameList.setAttribute(OfficeNamespaces.SVG_NS, "x", posX.getValue() + posX.getType().getType()); - frameList.setAttribute(OfficeNamespaces.SVG_NS, "y", posY.getValue() + posY.getType().getType()); - - - LOGGER.debug("Image " + imageData + " A-Width: " + imageAreaWidthVal + ", A-Height: " + imageAreaHeightVal); - - if (imageAreaWidthVal != null) - { - frameList.setAttribute(OfficeNamespaces.SVG_NS, - "width", imageAreaWidthVal.getValue() + imageAreaWidthVal.getType().getType()); - } - - if (imageAreaHeightVal != null) - { - frameList.setAttribute(OfficeNamespaces.SVG_NS, - "height", imageAreaHeightVal.getValue() + imageAreaHeightVal.getType().getType()); - } - - - final AttributeList imageList = new AttributeList(); - imageList.setAttribute(OfficeNamespaces.XLINK_NS, "href", image.getEmbeddableLink()); - imageList.setAttribute(OfficeNamespaces.XLINK_NS, "type", "simple"); - imageList.setAttribute(OfficeNamespaces.XLINK_NS, "show", "embed"); - imageList.setAttribute(OfficeNamespaces.XLINK_NS, "actuate", "onLoad"); - - - try - { - getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, "frame", frameList, XmlWriterSupport.OPEN); - getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.IMAGE, imageList, XmlWriterSupport.CLOSE); - getXmlWriter().writeCloseTag(); - } - catch (IOException ioe) - { - throw new ReportProcessingException(FAILED, ioe); - } - } - } - - private CSSNumericValue computeImageWidth(final ImageElementContext imageElementContext) - { - final LengthCalculator calculator = new LengthCalculator(); - final String[] strings = imageElementContext.getColStyles(); - for (int i = 0; i < strings.length; i++) - { - final String styleName = strings[i]; - final CSSNumericValue value = computeColumnWidth(styleName); - if (value != null) - { - calculator.add(value); - } - } - return calculator.getResult(); - } - - private CSSNumericValue computeImageHeight(final ImageElementContext imageElementContext) - { - final LengthCalculator calculator = new LengthCalculator(); - final String[] strings = imageElementContext.getRowStyles(); - for (int i = 0; i < strings.length; i++) - { - final String styleName = strings[i]; - final CSSNumericValue value = computeRowHeight(styleName); - if (value != null) - { - calculator.add(value); - } - } - return calculator.getResult(); - } - - protected CSSNumericValue computeRowHeight(final String rowStyle) - { - final OfficeStylesCollection contentStyles = getContentStylesCollection(); - final OfficeStyle style = contentStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); - if (style != null) - { - final Element element = style.getTableRowProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); - if (height != null) - { - return parseLength(height); - } - } - - final String styleParent = style.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - - final OfficeStylesCollection globalStyles = getGlobalStylesCollection(); - final OfficeStyle globalStyle = globalStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); - if (globalStyle != null) - { - final Element element = globalStyle.getTableRowProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); - if (height != null) - { - return parseLength(height); - } - } - final String styleParent = globalStyle.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - - final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); - final OfficeStyle predefStyle = predefStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); - if (predefStyle != null) - { - final Element element = predefStyle.getTableRowProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); - if (height != null) - { - return parseLength(height); - } - } - final String styleParent = predefStyle.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - // not found. - return null; - } - - protected CSSNumericValue computeColumnWidth(final String colStyle) - { - final OfficeStylesCollection contentStyles = getContentStylesCollection(); - final OfficeStyle style = contentStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); - if (style != null) - { - final Element element = style.getTableColumnProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); - if (height != null) - { - return parseLength(height); - } - } - - final String styleParent = style.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - - final OfficeStylesCollection globalStyles = getGlobalStylesCollection(); - final OfficeStyle globalStyle = globalStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); - if (globalStyle != null) - { - final Element element = globalStyle.getTableColumnProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); - if (height != null) - { - return parseLength(height); - } - } - final String styleParent = globalStyle.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - - final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); - final OfficeStyle predefStyle = predefStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); - if (predefStyle != null) - { - final Element element = predefStyle.getTableColumnProperties(); - if (element != null) - { - final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); - if (height != null) - { - return parseLength(height); - } - } - final String styleParent = predefStyle.getStyleParent(); - if (styleParent != null) - { - return computeRowHeight(styleParent); - } - } - // not found. - return null; - } - - protected Element produceFirstChild(final Section style, - final String nameSpace, - final String type) - { - Element paragraphProps = style.findFirstChild(nameSpace, type); - if (paragraphProps == null) - { - paragraphProps = new Section(); - paragraphProps.setNamespace(nameSpace); - paragraphProps.setType(type); - style.addNode(paragraphProps); - } - return paragraphProps; - } - - protected void startChartProcessing(final AttributeMap attrs) - throws ReportProcessingException - { - final String classId = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "class-id"); - final String chartUrl = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "href"); - final ArrayList masterColumns = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_COLUMNS); - final ArrayList masterValues = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_VALUES); - final ArrayList detailColumns = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.DETAIL_COLUMNS); - final String href = oleProducer.produceOle(chartUrl, masterColumns, masterValues, detailColumns); - - final AttributeList oleList = new AttributeList(); - oleList.setAttribute(OfficeNamespaces.DRAWING_NS, "class-id", classId); - oleList.setAttribute(OfficeNamespaces.XLINK_NS, "href", "./" + href); - oleList.setAttribute(OfficeNamespaces.XLINK_NS, "type", "simple"); - oleList.setAttribute(OfficeNamespaces.XLINK_NS, "show", "embed"); - oleList.setAttribute(OfficeNamespaces.XLINK_NS, "actuate", "onLoad"); - - try - { - getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.OBJECT_OLE, oleList, XmlWriterSupport.CLOSE); - } - catch (IOException ioe) - { - throw new ReportProcessingException(FAILED, ioe); - } - } - - static private double[] calcPaintSize(final CSSNumericValue areaWidth, final CSSNumericValue areaHeight, - final CSSNumericValue imageWidth, final CSSNumericValue imageHeight) - { - - final double ratioX = areaWidth.getValue() / imageWidth.getValue(); - final double ratioY = areaHeight.getValue() / imageHeight.getValue(); - final double ratioMin = Math.min(ratioX, ratioY); - - double[] ret = new double[2]; - ret[0] = imageWidth.getValue() * ratioMin; - ret[1] = imageHeight.getValue() * ratioMin; - return ret; - } - - protected void writeNullDate() throws IOException - { - // write NULL DATE - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "calculation-settings", null, XmlWriterSupport.OPEN); - final AttributeMap nullDateAttributes = new AttributeMap(); - nullDateAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "date-value", "1900-01-01"); - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "null-date", buildAttributeList(nullDateAttributes), XmlWriterSupport.CLOSE); - xmlWriter.writeCloseTag(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer.java b/reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer.java deleted file mode 100644 index c3bc3291a780..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.JobProperties; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportExecutionException; -import com.sun.star.report.ReportJobDefinition; -import com.sun.star.report.pentaho.DefaultNameGenerator; -import com.sun.star.report.pentaho.PentahoReportEngine; -import com.sun.star.report.pentaho.PentahoReportEngineMetaData; - -import java.io.IOException; - -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public class OleProducer -{ - - private static final Log LOGGER = LogFactory.getLog(OleProducer.class); - private final InputRepository inputRepository; - private final OutputRepository outputRepository; - private final DefaultNameGenerator nameGenerator; - private final DataSourceFactory dataSourceFactory; - private final ImageService imageService; - private final Integer maxRows; - - public OleProducer(final InputRepository inputRepository, - final OutputRepository outputRepository, final ImageService imageService, final DataSourceFactory dataSourceFactory, final Integer maxRows) - { - if (inputRepository == null) - { - throw new NullPointerException(); - } - if (outputRepository == null) - { - throw new NullPointerException(); - } - - this.inputRepository = inputRepository; - this.outputRepository = outputRepository; - this.nameGenerator = new DefaultNameGenerator(outputRepository); - this.dataSourceFactory = dataSourceFactory; - this.imageService = imageService; - this.maxRows = maxRows; - } - - String produceOle(final String source, final List masterColumns, final List masterValues, final List detailColumns) - { - InputRepository subInputRepository = null; - OutputRepository subOutputRepository = null; - String output = ""; - try - { - subInputRepository = inputRepository.openInputRepository(source); - output = nameGenerator.generateStorageName("Object", null); - subOutputRepository = outputRepository.openOutputRepository(output, PentahoReportEngineMetaData.OPENDOCUMENT_CHART); - try - { - - final PentahoReportEngine engine = new PentahoReportEngine(); - final ReportJobDefinition definition = engine.createJobDefinition(); - final JobProperties procParms = definition.getProcessingParameters(); - - procParms.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, subInputRepository); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, subOutputRepository); - procParms.setProperty(ReportEngineParameterNames.INPUT_NAME, "content.xml"); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_NAME, "content.xml"); - procParms.setProperty(ReportEngineParameterNames.CONTENT_TYPE, PentahoReportEngineMetaData.OPENDOCUMENT_CHART); - procParms.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataSourceFactory); - procParms.setProperty(ReportEngineParameterNames.INPUT_MASTER_COLUMNS, masterColumns); - procParms.setProperty(ReportEngineParameterNames.INPUT_MASTER_VALUES, masterValues); - procParms.setProperty(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS, detailColumns); - procParms.setProperty(ReportEngineParameterNames.IMAGE_SERVICE, imageService); - procParms.setProperty(ReportEngineParameterNames.MAXROWS, maxRows); - - engine.createJob(definition).execute(); - } - catch (ReportExecutionException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } - catch (IOException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } - } - catch (IOException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } finally - { - if (subInputRepository != null) - { - subInputRepository.closeInputRepository(); - } - if (subOutputRepository != null) - { - subOutputRepository.closeOutputRepository(); - } - } - return output; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities.java b/reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities.java deleted file mode 100644 index 2357635551fd..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities.java +++ /dev/null @@ -1,605 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.DataStyle; -import com.sun.star.report.pentaho.model.FontFaceDeclsSection; -import com.sun.star.report.pentaho.model.FontFaceElement; -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.report.ReportProcessingException; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.util.AttributeNameGenerator; - - -/** - * Todo: Document me! - * - * @since 13.03.2007 - */ -public class StyleUtilities -{ - - private static final Log LOGGER = LogFactory.getLog(StyleUtilities.class); - private static final String STYLE = "style"; - - private StyleUtilities() - { - } - - /** - * Copies the specififed style (keyed by its family and name) into the current styles collection. This copies the - * style and all inherited styles into the target collection. Inherited common styles will be always be added to the - * common collection (which will be written into the 'styles.xml' later). - *

- * This method does nothing if the specified style already exists in the styles collection. - * - * @param styleFamily the family of the style to copy - * @param styleName the unique name of the style. - * @param stylesCollection the current styles collection - * @param commonCollection the global styles collection - * @param predefCollection the predefined styles from where to copy the styles. - * @throws ReportProcessingException if the style copying failed. - */ - public static void copyStyle(final String styleFamily, - final String styleName, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection) - throws ReportProcessingException - { - copyStyle(styleFamily, styleName, stylesCollection, - commonCollection, predefCollection, new HashSet()); - } - - /** - * Copies the specififed style (keyed by its family and name) into the current styles collection. This copies the - * style and all inherited styles into the target collection. Inherited common styles will be always be added to the - * common collection (which will be written into the 'styles.xml' later). - *

- * This method does nothing if the specified style already exists in the styles collection. - * - * @param styleFamily the family of the style to copy - * @param styleName the unique name of the style. - * @param stylesCollection the current styles collection - * @param commonCollection the global styles collection - * @param predefCollection the predefined styles from where to copy the styles. - * @param inheritanceTracker a collection of all styles that have been touched. This is used to prevent infinite - * loops and duplicates. - * @throws ReportProcessingException if the style copying failed. - */ - private static void copyStyle(final String styleFamily, - final String styleName, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection, - final Set inheritanceTracker) - throws ReportProcessingException - { - if (inheritanceTracker.contains(styleName)) - { - return; - } - inheritanceTracker.add(styleName); - - if (stylesCollection.containsStyle(styleFamily, styleName) || commonCollection.getCommonStyles().containsStyle(styleFamily, styleName)) - { - // fine, there's already a copy of the stylesheet. - return; - } - - final OfficeStyle predefCommonStyle = - predefCollection.getCommonStyles().getStyle(styleFamily, styleName); - if (predefCommonStyle != null) - { - // so we have an style from the predefined collection. - // copy it an add it to the current stylescollection - final OfficeStyles commonStyles = commonCollection.getCommonStyles(); - - copyStyleInternal(predefCommonStyle, commonStyles, stylesCollection, - commonCollection, predefCollection, styleFamily, inheritanceTracker); - return; - } - - final OfficeStyle predefAutoStyle = - predefCollection.getAutomaticStyles().getStyle(styleFamily, styleName); - if (predefAutoStyle != null) - { - // so we have an style from the predefined collection. - // copy it an add it to the current stylescollection - final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); - copyStyleInternal(predefAutoStyle, autoStyles, stylesCollection, - commonCollection, predefCollection, styleFamily, inheritanceTracker); - return; - } - - // There is no automatic style either. Now this means that someone - // messed up the fileformat. Lets create a new empty style for this. - final OfficeStyle autostyle = new OfficeStyle(); - autostyle.setNamespace(OfficeNamespaces.STYLE_NS); - autostyle.setType(STYLE); - autostyle.setStyleFamily(styleFamily); - autostyle.setStyleName(styleName); - - final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); - autoStyles.addStyle(autostyle); - } - - private static OfficeStyle copyStyleInternal( - final OfficeStyle predefCommonStyle, - final OfficeStyles styles, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection, - final String styleFamily, - final Set inheritanceTracker) - throws ReportProcessingException - { - try - { - final OfficeStyle preStyle = (OfficeStyle) predefCommonStyle.clone(); - styles.addStyle(preStyle); - performFontFaceProcessing(preStyle, stylesCollection, predefCollection); - performDataStyleProcessing(preStyle, stylesCollection, predefCollection); - - // Lookup the parent style .. - final String styleParent = preStyle.getStyleParent(); - final OfficeStyle inherited = - stylesCollection.getStyle(styleFamily, styleParent); - if (inherited != null) - { - // OK, recurse (and hope that we dont run into an infinite loop) .. - copyStyle(styleFamily, styleParent, stylesCollection, - commonCollection, predefCollection, inheritanceTracker); - } - else if (styleParent != null) - { - LOGGER.warn("Inconsistent styles: " + styleFamily + ":" + styleParent + " does not exist."); - } - return preStyle; - } - catch (CloneNotSupportedException e) - { - throw new ReportProcessingException("Failed to derive a stylesheet", e); - } - } - - private static void performFontFaceProcessing(final OfficeStyle style, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection predefCollection) - throws ReportProcessingException - { - final Element textProperties = style.getTextProperties(); - if (textProperties == null) - { - return; - } - - try - { - final FontFaceDeclsSection currentFonts = stylesCollection.getFontFaceDecls(); - final FontFaceDeclsSection predefFonts = predefCollection.getFontFaceDecls(); - - final String fontName = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, "font-name"); - if (fontName != null && !currentFonts.containsFont(fontName)) - { - final FontFaceElement element = predefFonts.getFontFace(fontName); - if (element != null) - { - currentFonts.addFontFace((FontFaceElement) element.clone()); - } - } - - final String fontNameAsian = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, - "font-name-asian"); - if (fontNameAsian != null && !currentFonts.containsFont(fontNameAsian)) - { - final FontFaceElement element = predefFonts.getFontFace( - fontNameAsian); - if (element != null) - { - currentFonts.addFontFace((FontFaceElement) element.clone()); - } - } - - final String fontNameComplex = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, - "font-name-complex"); - if (fontNameComplex != null && !currentFonts.containsFont(fontNameComplex)) - { - final FontFaceElement element = predefFonts.getFontFace( - fontNameComplex); - if (element != null) - { - currentFonts.addFontFace((FontFaceElement) element.clone()); - } - } - } - catch (CloneNotSupportedException e) - { - throw new ReportProcessingException("Failed to clone font-face element"); - } - } - - private static void performDataStyleProcessing(final OfficeStyle style, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection predefCollection) - throws ReportProcessingException - { - final Section derivedStyle = performDataStyleProcessing(style, stylesCollection, predefCollection, "data-style-name"); - if (derivedStyle != null) - { - try - { - final Section styleMap = (Section) derivedStyle.findFirstChild(OfficeNamespaces.STYLE_NS, "map"); - if (styleMap != null) - { - performDataStyleProcessing(styleMap, stylesCollection, predefCollection, "apply-style-name"); - } - } - catch (Exception e) - { - } - } - } - - private static Section performDataStyleProcessing(final Section style, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection predefCollection, - final String attributeName) - throws ReportProcessingException - { - final Object attribute = style.getAttribute(OfficeNamespaces.STYLE_NS, attributeName); - final DataStyle derivedStyle; - if (attribute != null) - { - final String styleName = String.valueOf(attribute); - if (!stylesCollection.getAutomaticStyles().containsDataStyle(styleName) && !stylesCollection.getCommonStyles().containsDataStyle(styleName)) - { - try - { - final OfficeStyles automaticStyles = predefCollection.getAutomaticStyles(); - final DataStyle autoDataStyle = automaticStyles.getDataStyle(styleName); - if (autoDataStyle != null) - { - derivedStyle = (DataStyle) autoDataStyle.clone(); - stylesCollection.getAutomaticStyles().addDataStyle(derivedStyle); - } - else - { - final OfficeStyles commonStyles = predefCollection.getCommonStyles(); - final DataStyle commonDataStyle = commonStyles.getDataStyle(styleName); - if (commonDataStyle != null) - { - derivedStyle = (DataStyle) commonDataStyle.clone(); - stylesCollection.getCommonStyles().addDataStyle(derivedStyle); - } - else - { - LOGGER.warn("Dangling data style: " + styleName); - derivedStyle = null; - } - } - } - catch (CloneNotSupportedException e) - { - throw new ReportProcessingException("Failed to copy style. This should not have happened."); - } - } - else - { - derivedStyle = null; - } - } - else - { - derivedStyle = null; - } - return derivedStyle; - } - - /** - * Derives the named style. If the style is a common style, a new automatic style is generated and inserted into the - * given stylesCollection. If the named style is an automatic style, the style is copied and inserted as new automatic - * style. - *

- * After the style has been created, the style's inheritance hierarchy will be copied as well. - *

- * If there is no style with the given name and family, a new empty automatic style will be created. - * - * @param styleFamily the family of the style to copy - * @param styleName the unique name of the style. - * @param stylesCollection the current styles collection - * @param commonCollection the global styles collection - * @param predefCollection the predefined styles from where to copy the styles. - * @param generator the style-name-generator of the current report-target - * @return the derived style instance. - * @throws ReportProcessingException if the style copying failed. - */ - public static OfficeStyle deriveStyle(final String styleFamily, - final String styleName, - final OfficeStylesCollection stylesCollection, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection, - final AttributeNameGenerator generator) - throws ReportProcessingException - { - if (styleFamily == null) - { - throw new NullPointerException("StyleFamily must not be null"); - } - if (styleName != null) - { - - final OfficeStyle currentAuto = - stylesCollection.getAutomaticStyles().getStyle(styleFamily, - styleName); - if (currentAuto != null) - { - // handle an automatic style .. - final OfficeStyle derivedStyle = - deriveAutomaticStyle(currentAuto, styleFamily, styleName, - generator, commonCollection, predefCollection); - stylesCollection.getAutomaticStyles().addStyle(derivedStyle); - return derivedStyle; - } - - final OfficeStyle currentCommon = - stylesCollection.getCommonStyles().getStyle(styleFamily, styleName); - if (currentCommon != null) - { - // handle an common style .. - final OfficeStyle derivedStyle = - deriveCommonStyle(currentCommon, styleFamily, styleName, - generator, commonCollection, predefCollection); - stylesCollection.getAutomaticStyles().addStyle(derivedStyle); - return derivedStyle; - } - -// final OfficeStyle commonAuto = -// commonCollection.getAutomaticStyles().getStyle(styleFamily, -// styleName); -// if (commonAuto != null) -// { -// // handle an automatic style .. -// final OfficeStyle derivedStyle = -// deriveAutomaticStyle(commonAuto, styleFamily, styleName, -// generator, commonCollection, predefCollection); -// stylesCollection.getAutomaticStyles().addStyle(derivedStyle); -// return derivedStyle; -// } - - final OfficeStyle commonCommon = - commonCollection.getCommonStyles().getStyle(styleFamily, styleName); - if (commonCommon != null) - { - // handle an common style .. - final OfficeStyle derivedStyle = - deriveCommonStyle(commonCommon, styleFamily, styleName, - generator, commonCollection, predefCollection); - stylesCollection.getAutomaticStyles().addStyle(derivedStyle); - return derivedStyle; - } - - final OfficeStyle predefAuto = - predefCollection.getAutomaticStyles().getStyle(styleFamily, - styleName); - if (predefAuto != null) - { - // handle an automatic style .. - final OfficeStyle derivedStyle = - deriveAutomaticStyle(predefAuto, styleFamily, styleName, - generator, commonCollection, predefCollection); - stylesCollection.getAutomaticStyles().addStyle(derivedStyle); - return derivedStyle; - } - - final OfficeStyle predefCommon = - predefCollection.getCommonStyles().getStyle(styleFamily, styleName); - if (predefCommon != null) - { - // handle an common style .. - final OfficeStyle derivedStyle = - deriveCommonStyle(predefCommon, styleFamily, styleName, - generator, commonCollection, predefCollection); - stylesCollection.getAutomaticStyles().addStyle(derivedStyle); - return derivedStyle; - } - } - - // No such style. Create a new one .. - final OfficeStyle autostyle = new OfficeStyle(); - autostyle.setNamespace(OfficeNamespaces.STYLE_NS); - autostyle.setType(STYLE); - autostyle.setStyleFamily(styleFamily); - if (styleName != null) - { - autostyle.setStyleName(styleName); - } - else - { - autostyle.setStyleName(generator.generateName("derived_anonymous")); - } - - final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); - autoStyles.addStyle(autostyle); - return autostyle; - } - - private static OfficeStyle deriveCommonStyle(final OfficeStyle commonStyle, - final String styleFamily, - final String styleName, - final AttributeNameGenerator nameGenerator, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection) - throws ReportProcessingException - { - final OfficeStyle autostyle = new OfficeStyle(); - autostyle.setNamespace(OfficeNamespaces.STYLE_NS); - autostyle.setType(STYLE); - autostyle.setStyleFamily(styleFamily); - autostyle.setStyleName(nameGenerator.generateName("derived_" + styleName)); - autostyle.setStyleParent(styleName); - - // now copy the common style .. - final OfficeStyles commonStyles = commonCollection.getCommonStyles(); - if (!commonStyles.containsStyle(styleFamily, styleName)) - { - copyStyleInternal(commonStyle, commonStyles, - commonCollection, commonCollection, predefCollection, - styleFamily, new HashSet()); - } - return autostyle; - } - - private static OfficeStyle deriveAutomaticStyle(final OfficeStyle commonStyle, - final String styleFamily, - final String styleName, - final AttributeNameGenerator nameGenerator, - final OfficeStylesCollection commonCollection, - final OfficeStylesCollection predefCollection) - throws ReportProcessingException - { - try - { - final OfficeStyle autostyle = (OfficeStyle) commonStyle.clone(); - autostyle.setNamespace(OfficeNamespaces.STYLE_NS); - autostyle.setType(STYLE); - autostyle.setStyleFamily(styleFamily); - autostyle.setStyleName(nameGenerator.generateName("derived_auto_" + styleName)); - - - final String parent = autostyle.getStyleParent(); - if (parent != null) - { - copyStyle(styleFamily, parent, commonCollection, commonCollection, - predefCollection); - } - return autostyle; - } - catch (CloneNotSupportedException e) - { - throw new ReportProcessingException( - "Deriving the style failed. Clone error: ", e); - } - } - - public static String queryStyle(final OfficeStylesCollection predefCollection, - final String styleFamily, - final String styleName, - final String sectionName, - final String propertyNamespace, - final String propertyName) - { - return queryStyle(predefCollection, styleFamily, - styleName, sectionName, propertyNamespace, propertyName, new HashSet()); - } - - public static OfficeStyle queryStyleByProperties(final OfficeStylesCollection predefCollection, - final String styleFamily, - final String sectionName, - final ArrayList propertyNamespace, - final ArrayList propertyName, - final ArrayList propertyValues) - { - if (propertyNamespace.size() != propertyName.size()) - { - return null; - } - final OfficeStyle[] styles = predefCollection.getAutomaticStyles().getAllStyles(); - for (int i = 0; i < styles.length; i++) - { - final OfficeStyle officeStyle = styles[i]; - if (officeStyle.getStyleFamily().equals(styleFamily)) - { - final Element section = officeStyle.findFirstChild(OfficeNamespaces.STYLE_NS, sectionName); - if (section != null) - { - int j = 0; - for (; j < propertyNamespace.size(); j++) - { - final String ns = (String) propertyNamespace.get(j); - final String prop = (String) propertyName.get(j); - final Object obj = section.getAttribute(ns, prop); - final Object value = propertyValues.get(j); - if (obj == null || value == null) - { - continue; - } - if (!propertyValues.get(j).equals(obj)) - { - break; - } - } - if (j == propertyName.size()) - { - return officeStyle; - } - } - } - } - return null; - } - - private static String queryStyle(final OfficeStylesCollection predefCollection, - final String styleFamily, - final String styleName, - final String sectionName, - final String propertyNamespace, - final String propertyName, - final Set seenStyles) - { - if (seenStyles.contains(styleName)) - { - return null; - } - seenStyles.add(styleName); - - final OfficeStyle style = predefCollection.getStyle(styleFamily, styleName); - if (style == null) - { - return null; // no such style - - } - final Element section = style.findFirstChild(OfficeNamespaces.STYLE_NS, sectionName); - if (section != null) - { - final Object attribute = section.getAttribute(propertyNamespace, propertyName); - if (attribute != null) - { - return String.valueOf(attribute); - } - } - final String parent = style.getStyleParent(); - if (parent == null) - { - return null; - } - return queryStyle(predefCollection, styleFamily, parent, sectionName, propertyNamespace, propertyName, seenStyles); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter.java b/reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter.java deleted file mode 100644 index 0b568cf86f12..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.DataStyle; -import com.sun.star.report.pentaho.model.FontFaceDeclsSection; -import com.sun.star.report.pentaho.model.FontFaceElement; -import com.sun.star.report.pentaho.model.OfficeMasterPage; -import com.sun.star.report.pentaho.model.OfficeMasterStyles; -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.model.PageLayout; -import com.sun.star.report.pentaho.model.RawText; - -import java.io.IOException; -import java.io.Writer; - -import java.util.Iterator; -import java.util.Map; -import java.util.TreeMap; - -import org.jfree.layouting.namespace.Namespaces; -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.JFreeReportBoot; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Node; -import org.jfree.report.structure.Section; -import org.jfree.report.structure.StaticText; - -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - - -/** - * This class writes the style collection into a 'styles.xml' document. - * - * @since 09.03.2007 - */ -public class StylesWriter -{ - - private final XmlWriter xmlWriter; - private final boolean writeOpeningTag; - - public StylesWriter(final Writer writer) - { - final DefaultTagDescription tagDescription = new DefaultTagDescription(); - tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), - OfficeDocumentReportTarget.TAG_DEF_PREFIX); - - this.xmlWriter = new XmlWriter(writer, tagDescription); - this.xmlWriter.setAlwaysAddNamespace(true); - this.writeOpeningTag = true; - } - - public StylesWriter(final XmlWriter xmlWriter) - { - this.xmlWriter = xmlWriter; - this.writeOpeningTag = false; - } - - public void writeContentStyles(final OfficeStylesCollection predefined, - final OfficeStylesCollection globals) - throws IOException, ReportProcessingException - { - writeFontFaces(new OfficeStylesCollection[] - { - globals - }); - writeAutomaticStylesSection(new OfficeStylesCollection[] - { - globals - }); - } - - public void writeGlobalStyles(final OfficeStylesCollection predefined, - final OfficeStylesCollection globals) - throws IOException, ReportProcessingException - { - if (writeOpeningTag) - { - performWriteRootTag(); - } - - writeFontFaces(new OfficeStylesCollection[] - { - globals - }); - writeCommonStylesSection(new OfficeStylesCollection[] - { - globals - }); - writeAutomaticStylesSection(new OfficeStylesCollection[] - { - globals - }); - writeMasterStylesSection(new OfficeStylesCollection[] - { - globals - }); - - if (writeOpeningTag) - { - xmlWriter.writeCloseTag(); - } - } - - private void writeMasterStylesSection(final OfficeStylesCollection[] osc) - throws IOException - { - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "master-styles", XmlWriterSupport.OPEN); - for (int sci = 0; sci < osc.length; sci++) - { - final OfficeStylesCollection collection = osc[sci]; - final OfficeMasterStyles officeStyles = collection.getMasterStyles(); - final OfficeMasterPage[] officeMasterPages = officeStyles.getAllMasterPages(); - for (int i = 0; i < officeMasterPages.length; i++) - { - final OfficeMasterPage masterPage = officeMasterPages[i]; - writeSection(masterPage); - } - - writeSectionChildren(officeStyles.getOtherNodes().getNodeArray()); - } - - xmlWriter.writeCloseTag(); - } - - private void writeCommonStylesSection(final OfficeStylesCollection[] osc) - throws IOException - { - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "styles", XmlWriterSupport.OPEN); - - for (int sci = 0; sci < osc.length; sci++) - { - final OfficeStylesCollection collection = osc[sci]; - final OfficeStyles officeStyles = collection.getCommonStyles(); - writeStyles(officeStyles); - } - - xmlWriter.writeCloseTag(); - } - - private void writeAutomaticStylesSection(final OfficeStylesCollection[] osc) - throws IOException - { - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "automatic-styles", XmlWriterSupport.OPEN); - for (int sci = 0; sci < osc.length; sci++) - { - final OfficeStylesCollection collection = osc[sci]; - final OfficeStyles officeStyles = collection.getAutomaticStyles(); - writeStyles(officeStyles); - } - - xmlWriter.writeCloseTag(); - } - - private void writeFontFaces(final OfficeStylesCollection[] osc) - throws IOException - { - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "font-face-decls", XmlWriterSupport.OPEN); - - final TreeMap fontFaces = new TreeMap(); - for (int sci = 0; sci < osc.length; sci++) - { - final OfficeStylesCollection collection = osc[sci]; - final FontFaceDeclsSection fontFaceDecls = collection.getFontFaceDecls(); - final FontFaceElement[] fontFaceElements = fontFaceDecls.getAllFontFaces(); - for (int i = 0; i < fontFaceElements.length; i++) - { - final FontFaceElement element = fontFaceElements[i]; - fontFaces.put(element.getStyleName(), element); - } - } - - final Iterator values = fontFaces.values().iterator(); - while (values.hasNext()) - { - final FontFaceElement element = values.next(); - writeElement(element); - } - - xmlWriter.writeCloseTag(); - } - - private void writeStyles(final OfficeStyles styles) - throws IOException - { - final OfficeStyle[] allStyles = styles.getAllStyles(); - for (int i = 0; i < allStyles.length; i++) - { - final OfficeStyle style = allStyles[i]; - writeSection(style); - } - - final DataStyle[] allDataStyles = styles.getAllDataStyles(); - for (int i = 0; i < allDataStyles.length; i++) - { - final DataStyle style = allDataStyles[i]; - writeSection(style); - } - - final PageLayout[] allPageStyles = styles.getAllPageStyles(); - for (int i = 0; i < allPageStyles.length; i++) - { - final PageLayout style = allPageStyles[i]; - writeSection(style); - } - - writeSectionChildren(styles.getOtherStyles()); - } - - private void writeElement(final Element element) - throws IOException - { - final String type = element.getType(); - final String namespace = element.getNamespace(); - final AttributeList attrList = buildAttributeList(element.getAttributeMap()); - xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.CLOSE); - } - - private void writeSection(final Section section) - throws IOException - { - final String type = section.getType(); - final String namespace = section.getNamespace(); - final AttributeList attrList = buildAttributeList(section.getAttributeMap()); - if (section.getNodeCount() == 0) - { - xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.CLOSE); - return; - } - - xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.OPEN); - writeSectionChildren(section.getNodeArray()); - - xmlWriter.writeCloseTag(); - } - - private void writeSectionChildren(final Node[] nodes) - throws IOException - { - for (int i = 0; i < nodes.length; i++) - { - final Node node = nodes[i]; - if (node instanceof Section) - { - writeSection((Section) node); - } - else if (node instanceof Element) - { - writeElement((Element) node); - } - else if (node instanceof RawText) - { - final RawText text = (RawText) node; - xmlWriter.writeText(text.getText()); - } - else if (node instanceof StaticText) - { - final StaticText text = (StaticText) node; - xmlWriter.writeTextNormalized(text.getText(), false); - } - } - } - - protected AttributeList buildAttributeList(final AttributeMap attrs) - { - final AttributeList attrList = new AttributeList(); - final String[] namespaces = attrs.getNameSpaces(); - for (int i = 0; i < namespaces.length; i++) - { - final String attrNamespace = namespaces[i]; - if (isFilteredNamespace(attrNamespace)) - { - continue; - } - - final Map localAttributes = attrs.getAttributes(attrNamespace); - final Iterator entries = localAttributes.entrySet().iterator(); - while (entries.hasNext()) - { - final Map.Entry entry = (Map.Entry) entries.next(); - final String key = String.valueOf(entry.getKey()); - attrList.setAttribute(attrNamespace, key, String.valueOf(entry.getValue())); - } - } - return attrList; - } - - protected boolean isFilteredNamespace(final String namespace) - { - if (Namespaces.LIBLAYOUT_NAMESPACE.equals(namespace)) - { - return true; - } - if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) - { - return true; - } - if (JFreeReportInfo.COMPATIBILITY_NAMESPACE.equals(namespace)) - { - return true; - } - if (OfficeNamespaces.OOREPORT_NS.equals(namespace)) - { - return true; - } - return false; - } - - private void performWriteRootTag() - throws IOException - { - final AttributeList rootAttributes = new AttributeList(); - rootAttributes.addNamespaceDeclaration("office", - OfficeNamespaces.OFFICE_NS); - rootAttributes.addNamespaceDeclaration("style", OfficeNamespaces.STYLE_NS); - rootAttributes.addNamespaceDeclaration("text", OfficeNamespaces.TEXT_NS); - rootAttributes.addNamespaceDeclaration("table", OfficeNamespaces.TABLE_NS); - rootAttributes.addNamespaceDeclaration("draw", OfficeNamespaces.DRAWING_NS); - rootAttributes.addNamespaceDeclaration("fo", OfficeNamespaces.FO_NS); - rootAttributes.addNamespaceDeclaration("xlink", OfficeNamespaces.XLINK_NS); - rootAttributes.addNamespaceDeclaration("dc", OfficeNamespaces.PURL_NS); - rootAttributes.addNamespaceDeclaration("meta", OfficeNamespaces.META_NS); - rootAttributes.addNamespaceDeclaration("number", - OfficeNamespaces.DATASTYLE_NS); - rootAttributes.addNamespaceDeclaration("svg", OfficeNamespaces.SVG_NS); - rootAttributes.addNamespaceDeclaration("chart", OfficeNamespaces.CHART_NS); - rootAttributes.addNamespaceDeclaration("chartooo", OfficeNamespaces.CHARTOOO_NS); - rootAttributes.addNamespaceDeclaration("dr3d", OfficeNamespaces.DR3D_NS); - rootAttributes.addNamespaceDeclaration("math", OfficeNamespaces.MATHML_NS); - rootAttributes.addNamespaceDeclaration("form", OfficeNamespaces.FORM_NS); - rootAttributes.addNamespaceDeclaration("script", - OfficeNamespaces.SCRIPT_NS); - rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); - rootAttributes.addNamespaceDeclaration("ooow", OfficeNamespaces.OOW2004_NS); - rootAttributes.addNamespaceDeclaration("oooc", OfficeNamespaces.OOC2004_NS); - rootAttributes.addNamespaceDeclaration("dom", - OfficeNamespaces.XML_EVENT_NS); - rootAttributes.addNamespaceDeclaration("xforms", - OfficeNamespaces.XFORMS_NS); - rootAttributes.addNamespaceDeclaration("xsd", OfficeNamespaces.XSD_NS); - rootAttributes.addNamespaceDeclaration("xsi", OfficeNamespaces.XSI_NS); - rootAttributes.addNamespaceDeclaration("grddl", OfficeNamespaces.GRDDL_NS); - rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", - OfficeDocumentReportTarget.ODF_VERSION); - - this.xmlWriter.writeXmlDeclaration("UTF-8"); - this.xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, - "document-styles", rootAttributes, XmlWriterSupport.OPEN); - } - - public void close() - throws IOException - { - xmlWriter.close(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor.java b/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor.java deleted file mode 100644 index 56ebb6c807bd..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.chart; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OutputRepository; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.SinglePassReportProcessor; - -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - -/** - * - */ -public class ChartRawReportProcessor extends SinglePassReportProcessor -{ - - private final OutputRepository outputRepository; - private final String targetName; - private final InputRepository inputRepository; - private final ImageService imageService; - private final DataSourceFactory dataSourceFactory; - - public ChartRawReportProcessor(final InputRepository inputRepository, - final OutputRepository outputRepository, - final String targetName, - final ImageService imageService, - final DataSourceFactory dataSourceFactory) - { - if (inputRepository == null) - { - throw new NullPointerException(); - } - if (outputRepository == null) - { - throw new NullPointerException(); - } - if (targetName == null) - { - throw new NullPointerException(); - } - if (imageService == null) - { - throw new NullPointerException(); - } - if (dataSourceFactory == null) - { - throw new NullPointerException(); - } - this.targetName = targetName; - this.inputRepository = inputRepository; - this.outputRepository = outputRepository; - this.imageService = imageService; - this.dataSourceFactory = dataSourceFactory; - } - - protected ReportTarget createReportTarget(final ReportJob job) - throws ReportProcessingException - { - final ReportStructureRoot report = job.getReportStructureRoot(); - final ResourceManager resourceManager = report.getResourceManager(); - - return new ChartRawReportTarget(job, resourceManager, report.getBaseResource(), - inputRepository, outputRepository, targetName, imageService, dataSourceFactory); - } - - public void processReport(final ReportJob job) throws ReportDataFactoryException, DataSourceException, - ReportProcessingException - { - final ReportTarget reportTarget = createReportTarget(job); - processReportRun(job, reportTarget); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget.java b/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget.java deleted file mode 100644 index 3d1446522a7c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.chart; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OfficeToken; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.PentahoReportEngineMetaData; -import com.sun.star.report.pentaho.output.OfficeDocumentReportTarget; - -import java.io.IOException; -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTargetUtil; - -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - -public class ChartRawReportTarget extends OfficeDocumentReportTarget -{ - - private boolean inFilterElements = false; - private boolean tableRowsStarted = false; - private int tableCount = 0; - private int closeTags = 0; - - public ChartRawReportTarget(final ReportJob reportJob, - final ResourceManager resourceManager, - final ResourceKey baseResource, - final InputRepository inputRepository, - final OutputRepository outputRepository, - final String target, - final ImageService imageService, - final DataSourceFactory dataSourceFactory) - throws ReportProcessingException - { - super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, dataSourceFactory); - } - - protected String getTargetMimeType() - { - return "application/vnd.oasis.opendocument.chart"; - } - - protected String getStartContent() - { - return "chart"; - } - - public String getExportDescriptor() - { - return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_CHART; - } - - protected void startContent(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException - { - inFilterElements = false; - closeTags = 0; - tableCount = 0; - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, getStartContent(), null, XmlWriterSupport.OPEN); - writeNullDate(); - ++closeTags; - } - - protected void endContent(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException - { - final XmlWriter xmlWriter = getXmlWriter(); - while (closeTags > 0) - { - xmlWriter.writeCloseTag(); - --closeTags; - } - } - - protected void startReportSection(final AttributeMap attrs, final int role) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected void endReportSection(final AttributeMap attrs, final int role) - throws IOException, DataSourceException, ReportProcessingException - { - } - - protected void startOther(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException - { - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - if (!isFilteredNamespace(namespace)) - { - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - try - { - processElement(attrs, namespace, elementType); - } - catch (IOException e) - { - throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); - } - } - } - - private boolean isFiltered(final String elementType) - { - return OfficeToken.TABLE_HEADER_COLUMNS.equals(elementType) || OfficeToken.TABLE_HEADER_ROWS.equals(elementType) || OfficeToken.TABLE_COLUMNS.equals(elementType); - } - - protected void endOther(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException - { - if (tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE) - { - return; - } - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - if (!isFilteredNamespace(namespace)) - { - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - // if this is the report namespace, write out a table definition .. - if (OfficeNamespaces.TABLE_NS.equals(namespace)) - { - if (OfficeToken.TABLE.equals(elementType) || OfficeToken.TABLE_ROWS.equals(elementType)) - { - return; - } - else if (isFiltered(elementType)) - { - inFilterElements = false; - if (tableCount > 1) - { - return; - } - } - } - else if (OfficeNamespaces.CHART_NS.equals(namespace) && "chart".equals(elementType)) - { - return; - } - if (inFilterElements && tableCount > 1) - { - return; - } - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeCloseTag(); - --closeTags; - } - } - - public void processContent(final DataFlags value) - throws DataSourceException, ReportProcessingException - { - if (!(tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE)) - { - super.processContent(value); - } - } - - private void processElement(final AttributeMap attrs, final String namespace, final String elementType) - throws IOException, ReportProcessingException - { - if (tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE) - { - return; - } - if (OfficeNamespaces.TABLE_NS.equals(namespace)) - { - if (OfficeToken.TABLE.equals(elementType)) - { - tableCount += 1; - if (tableCount > 1) - { - return; - } - } - else if (OfficeToken.TABLE_ROWS.equals(elementType)) - { - if (tableCount > 1) - { - return; - } - tableRowsStarted = true; - } - else if (isFiltered(elementType)) - { - inFilterElements = true; - if (tableCount > 1) - { - return; - } - } - } - if (inFilterElements && tableCount > 1) - { - return; - } - - // All styles have to be processed or you will loose the paragraph-styles and inline text-styles. - // .. - performStyleProcessing(attrs); - - final AttributeList attrList = buildAttributeList(attrs); - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(namespace, elementType, attrList, XmlWriter.OPEN); - ++closeTags; - } - // ///////////////////////////////////////////////////////////////////////// - - public void processText(final String text) throws DataSourceException, ReportProcessingException - { - if (inFilterElements && tableCount > 1) - { - return; - } - super.processText(text); - } - - public void endReport(final ReportStructureRoot report) - throws DataSourceException, ReportProcessingException - { - super.endReport(report); - copyMeta(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java b/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java deleted file mode 100644 index 52f6619f7cbd..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.spreadsheet; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.pentaho.PentahoFormulaContext; - -import org.jfree.report.DataSourceException; -import org.jfree.report.ReportDataFactoryException; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.data.ReportContextImpl; -import org.jfree.report.flow.AbstractReportProcessor; -import org.jfree.report.flow.ReportContext; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTarget; - -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - -public class SpreadsheetRawReportProcessor extends AbstractReportProcessor -{ - - private final OutputRepository outputRepository; - private final String targetName; - private final InputRepository inputRepository; - private final ImageService imageService; - private final DataSourceFactory dataSourceFactory; - - public SpreadsheetRawReportProcessor(final InputRepository inputRepository, - final OutputRepository outputRepository, - final String targetName, - final ImageService imageService, - final DataSourceFactory dataSourceFactory) - { - if (outputRepository == null) - { - throw new NullPointerException(); - } - if (targetName == null) - { - throw new NullPointerException(); - } - if (imageService == null) - { - throw new NullPointerException(); - } - if (inputRepository == null) - { - throw new NullPointerException(); - } - if (dataSourceFactory == null) - { - throw new NullPointerException(); - } - - this.targetName = targetName; - this.inputRepository = inputRepository; - this.outputRepository = outputRepository; - this.imageService = imageService; - this.dataSourceFactory = dataSourceFactory; - } - - protected ReportTarget createReportTarget(final ReportJob job) throws ReportProcessingException - { - final ReportStructureRoot report = job.getReportStructureRoot(); - final ResourceManager resourceManager = report.getResourceManager(); - return new SpreadsheetRawReportTarget(job, resourceManager, report.getBaseResource(), inputRepository, outputRepository, targetName, imageService, dataSourceFactory); - } - - public void processReport(final ReportJob job) throws ReportDataFactoryException, DataSourceException, - ReportProcessingException - { - final ReportTarget reportTarget = createReportTarget(job); - // first run: collect table cell sizes for all tables - processReportRun(job, reportTarget); - // second run: uses table cell data to output a single uniform table - processReportRun(job, reportTarget); - } - - protected ReportContext createReportContext(final ReportJob job, - final ReportTarget target) - { - final ReportContext context = super.createReportContext(job, target); - if (context instanceof ReportContextImpl) - { - final ReportContextImpl impl = (ReportContextImpl) context; - impl.setFormulaContext(new PentahoFormulaContext(impl.getFormulaContext(), job.getConfiguration())); - } - return context; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java b/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java deleted file mode 100644 index 7418445007a3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java +++ /dev/null @@ -1,959 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.spreadsheet; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OfficeToken; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.PentahoReportEngineMetaData; -import com.sun.star.report.pentaho.model.OfficeMasterPage; -import com.sun.star.report.pentaho.model.OfficeMasterStyles; -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.model.PageSection; -import com.sun.star.report.pentaho.output.OfficeDocumentReportTarget; -import com.sun.star.report.pentaho.output.StyleUtilities; -import com.sun.star.report.pentaho.output.text.MasterPageFactory; -import com.sun.star.report.pentaho.styles.LengthCalculator; - -import java.io.IOException; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.jfree.layouting.input.style.values.CSSNumericType; -import org.jfree.layouting.input.style.values.CSSNumericValue; -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataFlags; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTargetUtil; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.util.IntegerCache; - -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - - -/** - * Creation-Date: 03.11.2007 - * - */ -public class SpreadsheetRawReportTarget extends OfficeDocumentReportTarget -{ - - private static final String[] FOPROPS = new String[] - { - "letter-spacing", "font-variant", "text-transform" - }; - private static final String NUMBERCOLUMNSSPANNED = "number-columns-spanned"; - private static final String[] STYLEPROPS = new String[] - { - "text-combine", "font-pitch-complex", "text-rotation-angle", "font-name", "text-blinking", "letter-kerning", "text-combine-start-char", "text-combine-end-char", "text-position", "text-scale" - }; - private static final int CELL_WIDTH_FACTOR = 10000; - private static final String TRANSPARENT = "transparent"; - private boolean paragraphFound = false; - private boolean paragraphHandled = false; - - /** - * This class represents a column boundary, not in width, but it's actual boundary location. One of the motivations - * for creating this class was to be able to record the boundaries for each incoming table while consuming as few - * objects/memory as possible. - */ - private static class ColumnBoundary implements Comparable - { - - private final Set tableIndices; - private final long boundary; - - private ColumnBoundary(final long boundary) - { - this.tableIndices = new HashSet(); - this.boundary = boundary; - } - - public void addTableIndex(final int table) - { - tableIndices.add(IntegerCache.getInteger(table)); - } - - public float getBoundary() - { - return boundary; - } - - public boolean isContainedByTable(final int table) - { - final Integer index = IntegerCache.getInteger(table); - return tableIndices.contains(index); - } - - public int compareTo(final ColumnBoundary arg0) - { - if (arg0.equals(this)) - { - return 0; - } - if (arg0 instanceof ColumnBoundary) - { - if (boundary > arg0.boundary) - { - return 1; - } - else - { - return -1; - } - } - return 1; - } - - public boolean equals(final Object obj) - { - return obj instanceof ColumnBoundary && ((ColumnBoundary) obj).boundary == boundary; - } - - public int hashCode() - { - assert false : "hashCode not designed"; - return 42; // any arbitrary constant will do - } - } - private String tableBackgroundColor; // null means transparent ... - private static final ColumnBoundary[] EMPTY_COLBOUNDS = new ColumnBoundary[0]; - private boolean elementBoundaryCollectionPass; - private boolean oleHandled; - private final List columnBoundaryList; - private long currentRowBoundaryMarker; - private ColumnBoundary[] sortedBoundaryArray; - private ColumnBoundary[] boundariesForTableArray; - private int tableCounter; - private int columnCounter; - private int columnSpanCounter; - private int currentSpan = 0; - private String unitsOfMeasure; - final private List shapes; - final private List ole; - final private List rowHeights; - - public SpreadsheetRawReportTarget(final ReportJob reportJob, - final ResourceManager resourceManager, - final ResourceKey baseResource, - final InputRepository inputRepository, - final OutputRepository outputRepository, - final String target, - final ImageService imageService, - final DataSourceFactory dataSourceFactory) - throws ReportProcessingException - { - super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, dataSourceFactory); - columnBoundaryList = new ArrayList(); - elementBoundaryCollectionPass = true; - rowHeights = new ArrayList(); - shapes = new ArrayList(); - ole = new ArrayList(); - oleHandled = false; - } - - public void startOther(final AttributeMap attrs) throws DataSourceException, ReportProcessingException - { - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.OBJECT_OLE, attrs)) - { - if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) - { - ole.add(attrs); - } - oleHandled = true; - return; - } - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - if (isRepeatingSection() || isFilteredNamespace(namespace)) - { - return; - } - - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - if (OfficeNamespaces.TEXT_NS.equals(namespace) && OfficeToken.P.equals(elementType) && !paragraphHandled) - { - paragraphFound = true; - return; - } - - if (OfficeNamespaces.DRAWING_NS.equals(namespace) && OfficeToken.FRAME.equals(elementType)) - { - if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) - { - final LengthCalculator len = new LengthCalculator(); - for (int i = 0; i < rowHeights.size(); i++) - { - len.add(rowHeights.get(i)); - // val += (rowHeights.get(i)).getValue(); - } - - rowHeights.clear(); - final CSSNumericValue currentRowHeight = len.getResult(); - rowHeights.add(currentRowHeight); - attrs.setAttribute(OfficeNamespaces.DRAWING_NS, "z-index", String.valueOf(shapes.size())); - final String y = (String) attrs.getAttribute(OfficeNamespaces.SVG_NS, "y"); - if (y != null) - { - len.add(parseLength(y)); - final CSSNumericValue currentY = len.getResult(); - attrs.setAttribute(OfficeNamespaces.SVG_NS, "y", currentY.getValue() + currentY.getType().getType()); - } - shapes.add(attrs); - } - return; - } - if (oleHandled) - { - if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) - { - ole.add(attrs); - } - return; - } - - // if this is the report namespace, write out a table definition .. - if (OfficeNamespaces.TABLE_NS.equals(namespace) && OfficeToken.TABLE.equals(elementType)) - { - // whenever we see a new table, we increment our tableCounter - // this is used to keep tracked of the boundary conditions per table - tableCounter++; - } - - if (isElementBoundaryCollectionPass()) - { - collectBoundaryForElement(attrs); - } - else - // if (!isElementBoundaryCollectionPass()) - { - try - { - processElement(attrs, namespace, elementType); - } - catch (IOException e) - { - throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); - } - } - } - - protected void startReportSection(final AttributeMap attrs, final int role) throws IOException, DataSourceException, ReportProcessingException - { - if ((role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) && (!PageSection.isPrintWithReportHeader(attrs) || !PageSection.isPrintWithReportFooter(attrs))) - { - startBuffering(new OfficeStylesCollection(), true); - } - else - { - super.startReportSection(attrs, role); - } - } - - protected void endReportSection(final AttributeMap attrs, final int role) throws IOException, DataSourceException, ReportProcessingException - { - if ((role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) && (!PageSection.isPrintWithReportHeader(attrs) || !PageSection.isPrintWithReportFooter(attrs))) - { - finishBuffering(); - } - else - { - super.endReportSection(attrs, role); - } - } - - private void handleParagraph() - { - if (paragraphFound) - { - try - { - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, null, XmlWriterSupport.OPEN); - paragraphHandled = true; - paragraphFound = false; - } - catch (IOException ex) - { - LOGGER.error("ReportProcessing failed", ex); - } - } - } - - private void processElement(final AttributeMap attrs, final String namespace, final String elementType) - throws IOException, ReportProcessingException - { - final XmlWriter xmlWriter = getXmlWriter(); - - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE, attrs)) - { - // a new table means we must clear our "calculated" table boundary array cache - boundariesForTableArray = null; - - final String tableStyle = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - if (tableStyle == null) - { - tableBackgroundColor = null; - } - else - { - final Object raw = StyleUtilities.queryStyle(getPredefinedStylesCollection(), OfficeToken.TABLE, tableStyle, - "table-properties", OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); - if (raw == null || TRANSPARENT.equals(raw)) - { - tableBackgroundColor = null; - } - else - { - tableBackgroundColor = String.valueOf(raw); - } - } - return; - } - - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, attrs) || ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, attrs)) - { - return; - } - - // covered-table-cell elements may appear in the input from row or column spans. In the event that we hit a - // column-span we simply ignore these elements because we are going to adjust the span to fit the uniform table. - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.COVERED_TABLE_CELL, attrs)) - { - if (columnSpanCounter > 0) - { - columnSpanCounter--; - } - - if (columnSpanCounter == 0) - { - // if we weren't expecting a covered-table-cell, let's use it, it's probably from a row-span - columnCounter++; - final int span = getColumnSpanForCell(tableCounter, columnCounter, 1); - // use the calculated span for the column in the uniform table to create any additional covered-table-cell - // elements - for (int i = 0; i < span; i++) - { - xmlWriter.writeTag(namespace, OfficeToken.COVERED_TABLE_CELL, null, XmlWriter.CLOSE); - } - } - return; - } - - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrs)) - { - // a new row means our column counter gets reset - columnCounter = 0; - // Lets make sure the color of the table is ok .. - if (tableBackgroundColor != null) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - final OfficeStyle style = deriveStyle(OfficeToken.TABLE_ROW, styleName); - Element tableRowProperties = style.getTableRowProperties(); - if (tableRowProperties == null) - { - tableRowProperties = new Section(); - tableRowProperties.setNamespace(OfficeNamespaces.STYLE_NS); - tableRowProperties.setType("table-row-properties"); - tableRowProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, tableBackgroundColor); - style.addNode(tableRowProperties); - } - else - { - final Object oldValue = tableRowProperties.getAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); - if (oldValue == null || TRANSPARENT.equals(oldValue)) - { - tableRowProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, tableBackgroundColor); - } - } - attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); - } - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_CELL, attrs)) - { - columnCounter++; - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - if (styleName != null) - { - final OfficeStyle cellStyle = getPredefinedStylesCollection().getStyle(OfficeToken.TABLE_CELL, styleName); - if (cellStyle != null) - { - final Section textProperties = (Section) cellStyle.getTextProperties(); - if (textProperties != null) - { - for (String i : FOPROPS) - { - textProperties.setAttribute(OfficeNamespaces.FO_NS, i, null); - } - textProperties.setAttribute(OfficeNamespaces.TEXT_NS, "display", null); - for (String i : STYLEPROPS) - { - textProperties.setAttribute(OfficeNamespaces.STYLE_NS, i, null); - } - } - final Section props = (Section) cellStyle.getTableCellProperties(); - if (props != null) - { - final Object raw = props.getAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); - if (TRANSPARENT.equals(raw)) - { - props.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, null); - // cellStyle.removeNode(props); - } - } - } - attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, styleName); - } - - final String numColSpanStr = (String) attrs.getAttribute(namespace, NUMBERCOLUMNSSPANNED); - int initialColumnSpan = columnSpanCounter = 1; - if (numColSpanStr != null) - { - initialColumnSpan = Integer.parseInt(numColSpanStr); - columnSpanCounter = initialColumnSpan; - } - final int span = getColumnSpanForCell(tableCounter, columnCounter, initialColumnSpan); - if (initialColumnSpan > 1) - { - // add the initial column span to our column counter index (subtract 1, since it is counted by default) - columnCounter += initialColumnSpan - 1; - } - - // if (span < initialColumnSpan) - // { - // // ColumnBoundary cbs[] = getBoundariesForTable(tableCounter); - // // for (int i = 0; i < cbs.length; i++) - // // { - // // System.out.print(cbs[i].getBoundary() + " "); - // // } - // // System.out.println(); - // - // LOGGER.error("A cell cannot span less than the declared columns: Declared=" + initialColumnSpan + " Computed=" - // + span); - // } - - // there's no point to create number-columns-spanned attributes if we only span 1 column - if (span > 1) - { - attrs.setAttribute(namespace, NUMBERCOLUMNSSPANNED, "" + span); - currentSpan = span; - } - // we must also generate "covered-table-cell" elements for each column spanned - // but we'll do this in the endElement, after we close this OfficeToken.TABLE_CELL - } - - // All styles have to be processed or you will loose the paragraph-styles and inline text-styles. - // .. - performStyleProcessing(attrs); - - final AttributeList attrList = buildAttributeList(attrs); - xmlWriter.writeTag(namespace, elementType, attrList, XmlWriter.OPEN); - // System.out.println("elementType = " + elementType); - } - - private void collectBoundaryForElement(final AttributeMap attrs) - { - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, attrs)) - { - // A table row resets the column counter. - resetCurrentRowBoundaryMarker(); - } - else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, attrs)) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - if (styleName == null) - { - // This should not happen, but if it does, we will ignore that cell. - return; - } - - final OfficeStyle style = getPredefinedStylesCollection().getStyle(OfficeToken.TABLE_COLUMN, styleName); - if (style == null) - { - // Now this is very bad. It means that there is no style defined with the given name. - return; - } - - final Element tableColumnProperties = style.getTableColumnProperties(); - String widthStr = (String) tableColumnProperties.getAttribute("column-width"); - widthStr = widthStr.substring(0, widthStr.indexOf(getUnitsOfMeasure(widthStr))); - final float val = Float.parseFloat(widthStr) * CELL_WIDTH_FACTOR; - addColumnWidthToRowBoundaryMarker((long) val); - ColumnBoundary currentRowBoundary = new ColumnBoundary(getCurrentRowBoundaryMarker()); - final List columnBoundaryList_ = getColumnBoundaryList(); - final int idx = columnBoundaryList_.indexOf(currentRowBoundary); - if (idx == -1) - { - columnBoundaryList_.add(currentRowBoundary); - } - else - { - currentRowBoundary = columnBoundaryList_.get(idx); - } - currentRowBoundary.addTableIndex(tableCounter); - } - } - - private String getUnitsOfMeasure(final String str) - { - if (unitsOfMeasure == null || "".equals(unitsOfMeasure)) - { - if (str == null || "".equals(str)) - { - unitsOfMeasure = "cm"; - return unitsOfMeasure; - } - - // build units of measure, set it - int i = str.length() - 1; - for (; i >= 0; i--) - { - final char c = str.charAt(i); - if (Character.isDigit(c) || c == '.' || c == ',') - { - break; - } - } - unitsOfMeasure = str.substring(i + 1); - } - return unitsOfMeasure; - } - - private void createTableShapes() throws ReportProcessingException - { - if (!shapes.isEmpty()) - { - try - { - final XmlWriter xmlWriter = getXmlWriter(); - // at this point we need to generate the table-columns section based on our boundary table - // - // - // .. - // - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.SHAPES, null, XmlWriterSupport.OPEN); - - - for (int i = 0; i < shapes.size(); i++) - { - final AttributeMap attrs = shapes.get(i); - final AttributeList attrList = buildAttributeList(attrs); - attrList.removeAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME); - xmlWriter.writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.FRAME, attrList, XmlWriterSupport.OPEN); - startChartProcessing(ole.get(i)); - - xmlWriter.writeCloseTag(); - } - xmlWriter.writeCloseTag(); - } - catch (IOException e) - { - throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); - } - } - } - - private void createTableColumns() throws ReportProcessingException - { - try - { - final XmlWriter xmlWriter = getXmlWriter(); - // at this point we need to generate the table-columns section based on our boundary table - // - // - // .. - // - // the first boundary is '0' which is a placeholder so we will ignore it - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, null, XmlWriterSupport.OPEN); - - // blow away current column styles - // start processing at i=1 because we added a boundary for "0" which is virtual - final ColumnBoundary[] cba = getSortedColumnBoundaryArray(); - for (int i = 1; i < cba.length; i++) - { - final ColumnBoundary cb = cba[i]; - float columnWidth = cb.getBoundary(); - if (i > 1) - { - columnWidth -= cba[i - 1].getBoundary(); - } - columnWidth = columnWidth / CELL_WIDTH_FACTOR; - final OfficeStyle style = deriveStyle(OfficeToken.TABLE_COLUMN, ("co" + i + "_")); - final Section tableColumnProperties = new Section(); - tableColumnProperties.setType("table-column-properties"); - tableColumnProperties.setNamespace(style.getNamespace()); - final String width = String.format("%f", columnWidth); - tableColumnProperties.setAttribute(style.getNamespace(), - "column-width", width + getUnitsOfMeasure(null)); - style.addNode(tableColumnProperties); - - final AttributeList myAttrList = new AttributeList(); - myAttrList.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, myAttrList, XmlWriterSupport.CLOSE); - } - xmlWriter.writeCloseTag(); - } - catch (IOException e) - { - throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); - } - } - - protected void endOther(final AttributeMap attrs) throws DataSourceException, ReportProcessingException - { - if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.OBJECT_OLE, attrs) || oleHandled) - { - oleHandled = false; - return; - } - - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrs) && isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - rowHeights.add(computeRowHeight(styleName)); - } - - if (isRepeatingSection() || isElementBoundaryCollectionPass()) - { - return; - } - - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - if (isFilteredNamespace(namespace)) - { - return; - } - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - if (OfficeNamespaces.DRAWING_NS.equals(namespace) && OfficeToken.FRAME.equals(elementType)) - { - return; - } - - // if this is the report namespace, write out a table definition .. - if (OfficeNamespaces.TABLE_NS.equals(namespace) && (OfficeToken.TABLE.equals(elementType) || OfficeToken.COVERED_TABLE_CELL.equals(elementType) || OfficeToken.TABLE_COLUMN.equals(elementType) || OfficeToken.TABLE_COLUMNS.equals(elementType))) - { - return; - } - - if (!paragraphHandled && OfficeNamespaces.TEXT_NS.equals(namespace) && OfficeToken.P.equals(elementType)) - { - if (!paragraphHandled) - { - return; - } - - paragraphHandled = false; - } - try - { - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeCloseTag(); - // table-cell elements may have a number-columns-spanned attribute which indicates how many - // 'covered-table-cell' elements we need to generate - generateCoveredTableCells(attrs); - } - catch (IOException e) - { - throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); - } - } - - private void generateCoveredTableCells(final AttributeMap attrs) throws IOException - { - if (!ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_CELL, attrs)) - { - return; - } - - // do this after we close the tag - final XmlWriter xmlWriter = getXmlWriter(); - // final Object attribute = attrs.getAttribute(OfficeNamespaces.TABLE_NS,NUMBERCOLUMNSSPANNED); - // final int span = TextUtilities.parseInt((String) attribute, 0); - final int span = currentSpan; - currentSpan = 0; - for (int i = 1; i < span; i++) - { - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.COVERED_TABLE_CELL, null, XmlWriter.CLOSE); - } - } - - public String getExportDescriptor() - { - return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET; - } - - // ///////////////////////////////////////////////////////////////////////// - public void processText(final String text) throws DataSourceException, ReportProcessingException - { - if (!(isRepeatingSection() || isElementBoundaryCollectionPass())) - { - handleParagraph(); - super.processText(text); - } - } - - public void processContent(final DataFlags value) throws DataSourceException, ReportProcessingException - { - if (!(isRepeatingSection() || isElementBoundaryCollectionPass())) - { - handleParagraph(); - super.processContent(value); - } - } - - protected String getStartContent() - { - return "spreadsheet"; - } - - protected void startContent(final AttributeMap attrs) throws IOException, DataSourceException, - ReportProcessingException - { - if (!isElementBoundaryCollectionPass()) - { - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, getStartContent(), null, XmlWriterSupport.OPEN); - - writeNullDate(); - - final AttributeMap tableAttributes = new AttributeMap(); - tableAttributes.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TABLE_NS); - tableAttributes.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.TABLE); - tableAttributes.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, generateInitialTableStyle()); - tableAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "name", "Report"); - - performStyleProcessing(tableAttributes); - - xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE, buildAttributeList(tableAttributes), XmlWriterSupport.OPEN); - createTableShapes(); - createTableColumns(); - } - } - - private String generateInitialTableStyle() throws ReportProcessingException - { - final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); - final OfficeStyles commonStyles = predefStyles.getAutomaticStyles(); - if (!commonStyles.containsStyle(OfficeToken.TABLE, "Initial_Table")) - { - final String masterPageName = createMasterPage(); - - final OfficeStyle tableStyle = new OfficeStyle(); - tableStyle.setStyleFamily(OfficeToken.TABLE); - tableStyle.setStyleName("Initial_Table"); - tableStyle.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); - final Element tableProperties = produceFirstChild(tableStyle, OfficeNamespaces.STYLE_NS, "table-properties"); - tableProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, TRANSPARENT); - commonStyles.addStyle(tableStyle); - } - return "Initial_Table"; - } - - private String createMasterPage() throws ReportProcessingException - { - final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); - final MasterPageFactory masterPageFactory = new MasterPageFactory(predefStyles.getMasterStyles()); - final OfficeMasterPage masterPage; - if (!masterPageFactory.containsMasterPage("Standard", null, null)) - { - masterPage = masterPageFactory.createMasterPage("Standard", null, null); - - final CSSNumericValue zeroLength = CSSNumericValue.createValue(CSSNumericType.CM, 0); - final String pageLayoutTemplate = masterPage.getPageLayout(); - if (pageLayoutTemplate == null) - { - // there is no pagelayout. Create one .. - final String derivedLayout = masterPageFactory.createPageStyle(getGlobalStylesCollection().getAutomaticStyles(), zeroLength, zeroLength); - masterPage.setPageLayout(derivedLayout); - } - else - { - final String derivedLayout = masterPageFactory.derivePageStyle(pageLayoutTemplate, - getPredefinedStylesCollection().getAutomaticStyles(), - getGlobalStylesCollection().getAutomaticStyles(), zeroLength, zeroLength); - masterPage.setPageLayout(derivedLayout); - } - - final OfficeStylesCollection officeStylesCollection = getGlobalStylesCollection(); - final OfficeMasterStyles officeMasterStyles = officeStylesCollection.getMasterStyles(); - officeMasterStyles.addMasterPage(masterPage); - } - else - { - masterPage = masterPageFactory.getMasterPage("Standard", null, null); - } - return masterPage.getStyleName(); - } - - protected void endContent(final AttributeMap attrs) throws IOException, DataSourceException, - ReportProcessingException - { - // todo - if (!isElementBoundaryCollectionPass()) - { - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeCloseTag(); - xmlWriter.writeCloseTag(); - } - } - - public void endReport(final ReportStructureRoot report) throws DataSourceException, ReportProcessingException - { - super.endReport(report); - setElementBoundaryCollectionPass(false); - resetTableCounter(); - columnCounter = 0; - copyMeta(); - } - - private boolean isElementBoundaryCollectionPass() - { - return elementBoundaryCollectionPass; - } - - private void setElementBoundaryCollectionPass(final boolean elementBoundaryCollectionPass) - { - this.elementBoundaryCollectionPass = elementBoundaryCollectionPass; - } - - private ColumnBoundary[] getSortedColumnBoundaryArray() - { - if (sortedBoundaryArray == null) - { - getColumnBoundaryList().add(new ColumnBoundary(0)); - sortedBoundaryArray = getColumnBoundaryList().toArray(new ColumnBoundary[getColumnBoundaryList().size()]); - Arrays.sort(sortedBoundaryArray); - } - return sortedBoundaryArray; - } - - private List getColumnBoundaryList() - { - return columnBoundaryList; - } - - private void addColumnWidthToRowBoundaryMarker(final long width) - { - currentRowBoundaryMarker += width; - } - - private long getCurrentRowBoundaryMarker() - { - return currentRowBoundaryMarker; - } - - private void resetTableCounter() - { - tableCounter = 0; - } - - private void resetCurrentRowBoundaryMarker() - { - currentRowBoundaryMarker = 0; - } - - private ColumnBoundary[] getBoundariesForTable(final int table) - { - if (boundariesForTableArray == null) - { - final List boundariesForTable = new ArrayList(); - final List boundaryList = getColumnBoundaryList(); - for (int i = 0; i < boundaryList.size(); i++) - { - final ColumnBoundary b = boundaryList.get(i); - if (b.isContainedByTable(table)) - { - boundariesForTable.add(b); - } - } - boundariesForTableArray = boundariesForTable.toArray(new ColumnBoundary[boundariesForTable.size()]); - Arrays.sort(boundariesForTableArray); - } - return boundariesForTableArray; - } - - private int getColumnSpanForCell(final int table, final int col, final int initialColumnSpan) - { - final ColumnBoundary[] globalBoundaries = getSortedColumnBoundaryArray(); - final ColumnBoundary[] tableBoundaries = getBoundariesForTable(table); - // how many column boundaries in the globalBoundaries list fall between the currentRowWidth and the next boundary - // for the current row - - float cellBoundary = tableBoundaries[col - 1].getBoundary(); - float cellWidth = tableBoundaries[col - 1].getBoundary(); - - if (col > 1) - { - cellWidth = cellWidth - tableBoundaries[col - 2].getBoundary(); - } - - if (initialColumnSpan > 1) - { - // ok we've got some additional spanning specified on the input - final int index = (col - 1) + (initialColumnSpan - 1); - cellWidth += tableBoundaries[index].getBoundary() - tableBoundaries[col - 1].getBoundary(); - cellBoundary = tableBoundaries[index].getBoundary(); - } - - int beginBoundaryIndex = 0; - int endBoundaryIndex = globalBoundaries.length - 1; - for (int i = 0; i < globalBoundaries.length; i++) - { - // find beginning boundary - if (globalBoundaries[i].getBoundary() <= cellBoundary - cellWidth) - { - beginBoundaryIndex = i; - } - if (globalBoundaries[i].getBoundary() <= cellBoundary) - { - endBoundaryIndex = i; - } - } - final int span = endBoundaryIndex - beginBoundaryIndex; - // span will be zero for the first column, so we adjust it to 1 - if (span == 0) - { - return 1; - } - // System.out.println("table = " + table + " col = " + col + " rowBoundaries.length = " + tableBoundaries.length + " - // cellWidth = " + cellWidth + " span = " + span); - return span; - } - - protected String getTargetMimeType() - { - return "application/vnd.oasis.opendocument.spreadsheet"; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory.java deleted file mode 100644 index e8854ef35826..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory.java +++ /dev/null @@ -1,407 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeMasterPage; -import com.sun.star.report.pentaho.model.OfficeMasterStyles; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.PageLayout; -import com.sun.star.report.pentaho.model.RawText; - -import java.util.HashMap; -import java.util.Map; - -import org.jfree.layouting.input.style.values.CSSNumericValue; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.util.AttributeNameGenerator; - - -/** - * Todo: Document me! - * - * @since 14.03.2007 - */ -public class MasterPageFactory -{ - - private static class MasterPageFactoryKey - { - - private final String template; - private final String pageHeader; - private final String pageFooter; - - public MasterPageFactoryKey(final String template, - final String pageHeader, - final String pageFooter) - { - this.template = template; - this.pageHeader = pageHeader; - this.pageFooter = pageFooter; - } - - public boolean equals(final Object o) - { - if (this != o) - { - if (o == null || getClass() != o.getClass()) - { - return false; - } - - final MasterPageFactoryKey that = (MasterPageFactoryKey) o; - - if (pageFooter != null ? !pageFooter.equals( - that.pageFooter) : that.pageFooter != null) - { - return false; - } - if (pageHeader != null ? !pageHeader.equals( - that.pageHeader) : that.pageHeader != null) - { - return false; - } - if (template != null ? !template.equals( - that.template) : that.template != null) - { - return false; - } - } - - return true; - } - - public int hashCode() - { - int result = (template != null ? template.hashCode() : 0); - result = 31 * result + (pageHeader != null ? pageHeader.hashCode() : 0); - result = 31 * result + (pageFooter != null ? pageFooter.hashCode() : 0); - return result; - } - - public String getTemplate() - { - return template; - } - - public String getPageHeader() - { - return pageHeader; - } - - public String getPageFooter() - { - return pageFooter; - } - } - - private static class PageLayoutKey - { - - private final String templateName; - private final CSSNumericValue headerHeight; - private final CSSNumericValue footerHeight; - - public PageLayoutKey(final String templateName, - final CSSNumericValue headerHeight, - final CSSNumericValue footerHeight) - { - this.templateName = templateName; - this.headerHeight = headerHeight; - this.footerHeight = footerHeight; - } - - public String getTemplateName() - { - return templateName; - } - - public CSSNumericValue getHeaderHeight() - { - return headerHeight; - } - - public CSSNumericValue getFooterHeight() - { - return footerHeight; - } - - public boolean equals(final Object o) - { - if (this == o) - { - return true; - } - if (o == null || getClass() != o.getClass()) - { - return false; - } - - final PageLayoutKey key = (PageLayoutKey) o; - - if (footerHeight != null ? !footerHeight.equals( - key.footerHeight) : key.footerHeight != null) - { - return false; - } - if (headerHeight != null ? !headerHeight.equals( - key.headerHeight) : key.headerHeight != null) - { - return false; - } - return !(templateName != null ? !templateName.equals( - key.templateName) : key.templateName != null); - - } - - public int hashCode() - { - int result; - result = (templateName != null ? templateName.hashCode() : 0); - result = 31 * result + (headerHeight != null ? headerHeight.hashCode() : 0); - result = 31 * result + (footerHeight != null ? footerHeight.hashCode() : 0); - return result; - } - } - // todo: Patch the page-layout ... - private static final String DEFAULT_PAGE_NAME = "Default"; - private final OfficeMasterStyles predefinedStyles; - private final AttributeNameGenerator masterPageNameGenerator; - private final Map masterPages; - private final AttributeNameGenerator pageLayoutNameGenerator; - private final Map pageLayouts; - - public MasterPageFactory(final OfficeMasterStyles predefinedStyles) - { - this.predefinedStyles = predefinedStyles; - this.masterPages = new HashMap(); - this.masterPageNameGenerator = new AttributeNameGenerator(); - this.pageLayouts = new HashMap(); - this.pageLayoutNameGenerator = new AttributeNameGenerator(); - } - - public OfficeMasterPage getMasterPage(final String template, - final String pageHeader, - final String pageFooter) - { - final MasterPageFactoryKey key = - new MasterPageFactoryKey(template, pageHeader, pageFooter); - return masterPages.get(key); - } - - public boolean containsMasterPage(final String template, - final String pageHeader, - final String pageFooter) - { - final MasterPageFactoryKey key = - new MasterPageFactoryKey(template, pageHeader, pageFooter); - return masterPages.containsKey(key); - } - - public OfficeMasterPage createMasterPage(final String template, - final String pageHeader, - final String pageFooter) - { - final MasterPageFactoryKey key = - new MasterPageFactoryKey(template, pageHeader, pageFooter); - final OfficeMasterPage cached = masterPages.get(key); - if (cached != null) - { - return cached; - } - - final String targetName = (masterPages.isEmpty()) ? "Standard" : template; - - OfficeMasterPage predef = predefinedStyles.getMasterPage(template); - if (predef == null) - { - // This is a 'magic' name .. - // todo: It could be that this should be called 'Standard' instead - predef = predefinedStyles.getMasterPage(MasterPageFactory.DEFAULT_PAGE_NAME); - } - - if (predef != null) - { - try - { - // derive - final OfficeMasterPage derived = (OfficeMasterPage) predef.clone(); - return setupMasterPage(derived, targetName, pageHeader, pageFooter, - key); - } - catch (CloneNotSupportedException cne) - { - throw new IllegalStateException("Implementation error: Unable to derive page", cne); - } - } - - final OfficeMasterPage masterPage = new OfficeMasterPage(); - masterPage.setNamespace(OfficeNamespaces.STYLE_NS); - masterPage.setType("master-page"); - return setupMasterPage(masterPage, targetName, pageHeader, pageFooter, key); - } - - private OfficeMasterPage setupMasterPage(final OfficeMasterPage derived, - final String targetName, - final String pageHeader, - final String pageFooter, - final MasterPageFactoryKey key) - { - derived.setStyleName(masterPageNameGenerator.generateName(targetName)); - masterPages.put(key, derived); - - if (pageHeader != null) - { - final Section header = new Section(); - header.setNamespace(OfficeNamespaces.STYLE_NS); - header.setType("header"); - header.addNode(new RawText(pageHeader)); - derived.addNode(header); - } - - if (pageFooter != null) - { - final Section footer = new Section(); - footer.setNamespace(OfficeNamespaces.STYLE_NS); - footer.setType("footer"); - footer.addNode(new RawText(pageFooter)); - derived.addNode(footer); - } - - return derived; - } - - public String createPageStyle(final OfficeStyles commonStyles, - final CSSNumericValue headerHeight, - final CSSNumericValue footerHeight) - { - final PageLayoutKey key = - new PageLayoutKey(null, headerHeight, footerHeight); - final PageLayout derived = new PageLayout(); - final String name = pageLayoutNameGenerator.generateName("autogenerated"); - derived.setStyleName(name); - commonStyles.addPageStyle(derived); - - if (headerHeight != null) - { - final Section headerStyle = new Section(); - headerStyle.setNamespace(OfficeNamespaces.STYLE_NS); - headerStyle.setType("header-style"); - derived.addNode(headerStyle); - MasterPageFactory.applyHeaderFooterHeight(headerStyle, headerHeight); - } - - if (footerHeight != null) - { - final Section footerStyle = new Section(); - footerStyle.setNamespace(OfficeNamespaces.STYLE_NS); - footerStyle.setType("footer-style"); - derived.addNode(footerStyle); - MasterPageFactory.applyHeaderFooterHeight(footerStyle, footerHeight); - } - pageLayouts.put(key, name); - return name; - } - - public String derivePageStyle(final String pageStyleTemplate, - final OfficeStyles predefined, - final OfficeStyles commonStyles, - final CSSNumericValue headerHeight, - final CSSNumericValue footerHeight) - throws ReportProcessingException - { - if (pageStyleTemplate == null) - { - throw new NullPointerException("A style-name must be given"); - } - - final PageLayoutKey key = - new PageLayoutKey(pageStyleTemplate, headerHeight, footerHeight); - final String pageLayoutName = pageLayouts.get(key); - if (pageLayoutName != null) - { - // there's already a suitable version included. - return pageLayoutName; - } - - final PageLayout original = predefined.getPageStyle(pageStyleTemplate); - if (original == null) - { - throw new ReportProcessingException("Invalid page-layout '" + pageStyleTemplate + "', will not continue."); - } - - try - { - final PageLayout derived = (PageLayout) original.clone(); - final String name = pageLayoutNameGenerator.generateName( - pageStyleTemplate); - derived.setStyleName(name); - commonStyles.addPageStyle(derived); - - if (headerHeight != null) - { - Section headerStyle = derived.getHeaderStyle(); - if (headerStyle == null) - { - headerStyle = new Section(); - headerStyle.setNamespace(OfficeNamespaces.STYLE_NS); - headerStyle.setType("header-style"); - derived.addNode(headerStyle); - } - MasterPageFactory.applyHeaderFooterHeight(headerStyle, headerHeight); - } - - if (footerHeight != null) - { - Section footerStyle = derived.getFooterStyle(); - if (footerStyle == null) - { - footerStyle = new Section(); - footerStyle.setNamespace(OfficeNamespaces.STYLE_NS); - footerStyle.setType("footer-style"); - derived.addNode(footerStyle); - } - - MasterPageFactory.applyHeaderFooterHeight(footerStyle, footerHeight); - } - pageLayouts.put(key, name); - return name; - } - catch (CloneNotSupportedException e) - { - throw new IllegalStateException("Clone failed.", e); - } - } - - private static void applyHeaderFooterHeight(final Section headerFooterStyle, - final CSSNumericValue style) - { - Element headerFooterProps = headerFooterStyle.findFirstChild(OfficeNamespaces.STYLE_NS, "header-footer-properties"); - if (headerFooterProps == null) - { - headerFooterProps = new Section(); - headerFooterProps.setNamespace(OfficeNamespaces.STYLE_NS); - headerFooterProps.setType("header-footer-properties"); - headerFooterStyle.addNode(headerFooterProps); - } - headerFooterProps.setAttribute(OfficeNamespaces.SVG_NS, "height", style.getValue() + style.getType().getType()); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition.java deleted file mode 100644 index f968f036dcd0..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - -/** - * Todo: Document me! - * - * @since 24.03.2007 - */ -public class PageBreakDefinition -{ - - private final boolean resetPageNumber; - - public PageBreakDefinition(final boolean resetPageNumber) - { - this.resetPageNumber = resetPageNumber; - } - - public boolean isResetPageNumber() - { - return resetPageNumber; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext.java deleted file mode 100644 index a170be7efead..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - -import com.sun.star.report.pentaho.styles.LengthCalculator; - -import org.jfree.layouting.input.style.values.CSSNumericValue; - -/** - * Todo: Document me! - * - * @since 24.03.2007 - */ -public class PageContext -{ - - public static final int KEEP_TOGETHER_OFF = 0; - public static final int KEEP_TOGETHER_GROUP = 1; - public static final int KEEP_TOGETHER_FIRST_DETAIL = 2; - private PageContext parent; - private String header; - private CSSNumericValue headerHeight; - private String footer; - private CSSNumericValue footerHeight; - private int keepTogether; - private Integer columnCount = null; - private boolean sectionOpen; - - public PageContext() - { - this(null); - } - - public PageContext(final PageContext parent) - { - this.parent = parent; - if (parent != null) - { - this.keepTogether = parent.getKeepTogether(); - } - } - - public int getActiveColumns() - { - PageContext pc = this; - while (pc != null) - { - // TODO: IS this code correct? Why not columnCount = pc.getColumnCount(); ? - if (columnCount != null) - { - return columnCount; - } - pc = pc.getParent(); - } - return 1; - } - - public void setColumnCount(final Integer columnCount) - { - this.columnCount = columnCount; - } - - public Integer getColumnCount() - { - return columnCount; - } - - public String getHeader() - { - return header; - } - - public void setHeader(final String header, final CSSNumericValue height) - { - this.header = header; - this.headerHeight = height; - } - - public String getFooter() - { - return footer; - } - - public CSSNumericValue getHeaderHeight() - { - return headerHeight; - } - - public CSSNumericValue getFooterHeight() - { - return footerHeight; - } - - public void setFooter(final String footer, final CSSNumericValue height) - { - this.footer = footer; - this.footerHeight = height; - } - - public int getKeepTogether() - { - return keepTogether; - } - - public void setKeepTogether(final int keepTogether) - { - this.keepTogether = keepTogether; - } - - public PageContext getParent() - { - return parent; - } - - public CSSNumericValue getAllFooterSize() - { - if (parent == null) - { - return footerHeight; - } - - final LengthCalculator lnc = new LengthCalculator(); - PageContext pc = this; - while (pc != null) - { - lnc.add(pc.getFooterHeight()); - pc = pc.getParent(); - } - return lnc.getResult(); - } - - public CSSNumericValue getAllHeaderSize() - { - if (parent == null) - { - return headerHeight; - } - - final LengthCalculator lnc = new LengthCalculator(); - PageContext pc = this; - while (pc != null) - { - lnc.add(pc.getHeaderHeight()); - pc = pc.getParent(); - } - return lnc.getResult(); - } - - public String getPageFooterContent() - { - if (parent == null) - { - return getFooter(); - } - - final StringBuffer b = new StringBuffer(); - - PageContext pc = this; - while (pc != null) - { - final String footer_ = pc.getFooter(); - if (footer_ != null) - { - b.append(footer_); - } - pc = pc.getParent(); - } - - if (b.length() != 0) - { - return b.toString(); - } - return null; - } - - public String getPageHeaderContent() - { - if (parent == null) - { - return getHeader(); - } - - final StringBuffer b = new StringBuffer(); - b.append(parent.getPageHeaderContent()); - b.append(getHeader()); - - if (b.length() != 0) - { - return b.toString(); - } - return null; - } - - public boolean isSectionOpen() - { - return sectionOpen; - } - - public void setSectionOpen(final boolean sectionOpen) - { - this.sectionOpen = sectionOpen; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor.java deleted file mode 100644 index 294bc83a2067..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.pentaho.PentahoFormulaContext; - -import org.jfree.report.ReportProcessingException; -import org.jfree.report.data.ReportContextImpl; -import org.jfree.report.flow.ReportContext; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTarget; -import org.jfree.report.flow.SinglePassReportProcessor; - -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - -/** - * Creation-Date: 03.07.2006, 17:08:25 - * - */ -public class TextRawReportProcessor extends SinglePassReportProcessor -{ - - private final OutputRepository outputRepository; - private final String targetName; - private final InputRepository inputRepository; - private final ImageService imageService; - private final DataSourceFactory dataSourceFactory; - - public TextRawReportProcessor(final InputRepository inputRepository, - final OutputRepository outputRepository, - final String targetName, - final ImageService imageService, - final DataSourceFactory dataSourceFactory) - { - if (inputRepository == null) - { - throw new NullPointerException(); - } - if (outputRepository == null) - { - throw new NullPointerException(); - } - if (targetName == null) - { - throw new NullPointerException(); - } - if (imageService == null) - { - throw new NullPointerException(); - } - if (dataSourceFactory == null) - { - throw new NullPointerException(); - } - - this.targetName = targetName; - this.inputRepository = inputRepository; - this.outputRepository = outputRepository; - this.imageService = imageService; - this.dataSourceFactory = dataSourceFactory; - } - - protected ReportTarget createReportTarget(final ReportJob job) - throws ReportProcessingException - { - final ReportStructureRoot report = job.getReportStructureRoot(); - final ResourceManager resourceManager = report.getResourceManager(); - - return new TextRawReportTarget(job, resourceManager, report.getBaseResource(), - inputRepository, outputRepository, targetName, imageService, dataSourceFactory); - } - - protected ReportContext createReportContext(final ReportJob job, - final ReportTarget target) - { - final ReportContext context = super.createReportContext(job, target); - if (context instanceof ReportContextImpl) - { - final ReportContextImpl impl = (ReportContextImpl) context; - impl.setFormulaContext(new PentahoFormulaContext(impl.getFormulaContext(), job.getConfiguration())); - } - return context; - } -} - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget.java deleted file mode 100644 index 865ae47ac24e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget.java +++ /dev/null @@ -1,1444 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.ImageService; -import com.sun.star.report.InputRepository; -import com.sun.star.report.OfficeToken; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.PentahoReportEngineMetaData; -import com.sun.star.report.pentaho.layoutprocessor.FormatValueUtility; -import com.sun.star.report.pentaho.model.OfficeMasterPage; -import com.sun.star.report.pentaho.model.OfficeMasterStyles; -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.model.PageSection; -import com.sun.star.report.pentaho.output.OfficeDocumentReportTarget; -import com.sun.star.report.pentaho.output.StyleUtilities; -import com.sun.star.report.pentaho.styles.LengthCalculator; - -import java.io.IOException; - -import java.io.OutputStream; -import java.io.OutputStreamWriter; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; - - -import org.jfree.layouting.input.style.values.CSSNumericValue; -import org.jfree.layouting.util.AttributeMap; -import org.jfree.report.DataSourceException; -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.ReportProcessingException; -import org.jfree.report.flow.ReportJob; -import org.jfree.report.flow.ReportStructureRoot; -import org.jfree.report.flow.ReportTargetUtil; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.util.AttributeNameGenerator; -import org.jfree.report.util.IntegerCache; - -import org.pentaho.reporting.libraries.base.util.FastStack; -import org.pentaho.reporting.libraries.base.util.ObjectUtilities; -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - - -/** - * Creation-Date: 03.07.2006, 16:28:00 - * - */ -public class TextRawReportTarget extends OfficeDocumentReportTarget -{ - - private static final String ALWAYS = "always"; - private static final String KEEP_TOGETHER = "keep-together"; - private static final String KEEP_WITH_NEXT = "keep-with-next"; - private static final String MAY_BREAK_BETWEEN_ROWS = "may-break-between-rows"; - private static final String NAME = "name"; - private static final String NONE = "none"; - private static final String NORMAL = "normal"; - private static final String PARAGRAPH_PROPERTIES = "paragraph-properties"; - private static final String STANDARD = "Standard"; - private static final String TABLE_PROPERTIES = "table-properties"; - private static final String VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT = "variables_paragraph_with_next"; - private static final String VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT = "variables_paragraph_without_next"; - private static final int TABLE_LAYOUT_VARIABLES_PARAGRAPH = 0; - private static final int TABLE_LAYOUT_SINGLE_DETAIL_TABLE = 2; - private static final int CP_SETUP = 0; - private static final int CP_FIRST_TABLE = 1; - private static final int CP_NEXT_TABLE = 2; - // This is the initial state of the detail-band processing. It states, that we are now waiting for a - // detail-band to be printed. - private static final int DETAIL_SECTION_WAIT = 0; - // The first detail section has started. - private static final int DETAIL_SECTION_FIRST_STARTED = 1; - // The first detail section has been printed. - private static final int DETAIL_SECTION_FIRST_PRINTED = 2; - // An other detail section has started - private static final int DETAIL_SECTION_OTHER_STARTED = 3; - // The other detail section has been printed. - private static final int DETAIL_SECTION_OTHER_PRINTED = 4; - private boolean pageFooterOnReportFooter; - private boolean pageFooterOnReportHeader; - private boolean pageHeaderOnReportFooter; - private boolean pageHeaderOnReportHeader; - private int contentProcessingState; - private OfficeMasterPage currentMasterPage; - private final FastStack activePageContext; - private MasterPageFactory masterPageFactory; - private LengthCalculator sectionHeight; - private String variables; - private PageBreakDefinition pageBreakDefinition; - private VariablesDeclarations variablesDeclarations; - private boolean columnBreakPending; - private boolean sectionKeepTogether; - private final AttributeNameGenerator sectionNames; - private int detailBandProcessingState; - private final int tableLayoutConfig; - private int expectedTableRowCount; - private boolean firstCellSeen; - - public TextRawReportTarget(final ReportJob reportJob, - final ResourceManager resourceManager, - final ResourceKey baseResource, - final InputRepository inputRepository, - final OutputRepository outputRepository, - final String target, - final ImageService imageService, - final DataSourceFactory datasourcefactory) - throws ReportProcessingException - { - super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, datasourcefactory); - activePageContext = new FastStack(); - this.sectionNames = new AttributeNameGenerator(); - - this.tableLayoutConfig = TABLE_LAYOUT_SINGLE_DETAIL_TABLE; - } - - protected String getTargetMimeType() - { - return "application/vnd.oasis.opendocument.text"; - } - - /** - * Checks, whether a manual page break should be inserted at the next possible location. - * - * @return true, if a pagebreak is pending, false otherwise. - */ - private boolean isPagebreakPending() - { - return pageBreakDefinition != null; - } - - private boolean isResetPageNumber() - { - return pageBreakDefinition != null && pageBreakDefinition.isResetPageNumber(); - } - - /** - * Defines, whether a manual pagebreak should be inserted at the next possible location. - * - * @param pageBreakDefinition the new flag value. - */ - private void setPagebreakDefinition(final PageBreakDefinition pageBreakDefinition) - { - this.pageBreakDefinition = pageBreakDefinition; - } - - private PageBreakDefinition getPagebreakDefinition() - { - return pageBreakDefinition; - } - - // todo - private boolean isKeepTableWithNext() - { - final int keepTogetherState = getCurrentContext().getKeepTogether(); - if (keepTogetherState == PageContext.KEEP_TOGETHER_GROUP) - { - return true; - } - - final boolean keepWithNext; - keepWithNext = keepTogetherState == PageContext.KEEP_TOGETHER_FIRST_DETAIL && (detailBandProcessingState == DETAIL_SECTION_WAIT); - return keepWithNext; - } - - private boolean isSectionPagebreakAfter(final AttributeMap attrs) - { - final Object forceNewPage = - attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "force-new-page"); - return "after-section".equals(forceNewPage) || "before-after-section".equals(forceNewPage); - } - - private boolean isSectionPagebreakBefore(final AttributeMap attrs) - { - final Object forceNewPage = - attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "force-new-page"); - return "before-section".equals(forceNewPage) || "before-after-section".equals(forceNewPage); - } - - private PageContext getCurrentContext() - { - return (PageContext) activePageContext.peek(); - } - - private String createMasterPage(final boolean printHeader, - final boolean printFooter) - throws ReportProcessingException - { - // create the master page for the report-header. - // If there is a page-header or footer in the report that gets - // surpressed on the report-header, we have to insert a pagebreak - // afterwards. - - final String activePageFooter; - // Check, whether the report header can have a page-header - final PageContext context = getCurrentContext(); - if (printFooter) - { - activePageFooter = context.getPageFooterContent(); - } - else - { - activePageFooter = null; - } - final String activePageHeader; - if (printHeader) - { - // we have to insert a manual pagebreak after the report header. - activePageHeader = context.getPageHeaderContent(); - } - else - { - activePageHeader = null; - } - - final String masterPageName; - if (currentMasterPage == null || !masterPageFactory.containsMasterPage(STANDARD, activePageHeader, activePageFooter)) - { - - final CSSNumericValue headerSize = context.getAllHeaderSize(); - final CSSNumericValue footerSize = context.getAllFooterSize(); - - - currentMasterPage = masterPageFactory.createMasterPage(STANDARD, activePageHeader, activePageFooter); - -// LOGGER.debug("Created a new master-page: " + currentMasterPage.getStyleName()); - - // todo: Store the page-layouts as well. - // The page layouts are derived from a common template, but as the - // header-heights differ, we have to derive these beasts instead - // of copying them - - final OfficeStylesCollection officeStylesCollection = getGlobalStylesCollection(); - final OfficeMasterStyles officeMasterStyles = officeStylesCollection.getMasterStyles(); - final String pageLayoutTemplate = currentMasterPage.getPageLayout(); - if (pageLayoutTemplate == null) - { - // there is no pagelayout. Create one .. - final String derivedLayout = masterPageFactory.createPageStyle(getGlobalStylesCollection().getAutomaticStyles(), headerSize, footerSize); - currentMasterPage.setPageLayout(derivedLayout); - } - else - { - final String derivedLayout = masterPageFactory.derivePageStyle(pageLayoutTemplate, - getPredefinedStylesCollection().getAutomaticStyles(), - getGlobalStylesCollection().getAutomaticStyles(), headerSize, footerSize); - currentMasterPage.setPageLayout(derivedLayout); - } - officeMasterStyles.addMasterPage(currentMasterPage); - masterPageName = currentMasterPage.getStyleName(); - } - else - { - // retrieve the master-page. - final OfficeMasterPage masterPage = masterPageFactory.getMasterPage(STANDARD, activePageHeader, activePageFooter); - if (ObjectUtilities.equal(masterPage.getStyleName(), currentMasterPage.getStyleName())) - { - // They are the same, - masterPageName = null; - } - else - { - // reuse the existing one .. - currentMasterPage = masterPage; - masterPageName = currentMasterPage.getStyleName(); - } - } - - // if either the pageheader or footer are *not* printed with the - // report header, then this implies that we have to insert a manual - // pagebreak at the end of the section. - - if ((!printHeader && context.getHeader() != null) || (!printFooter && context.getFooter() != null)) - { - setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); - } - - return masterPageName; - } - - private boolean isColumnBreakPending() - { - return columnBreakPending; - } - - private void setColumnBreakPending(final boolean columnBreakPending) - { - this.columnBreakPending = columnBreakPending; - } - - private Integer parseInt(final Object value) - { - if (value instanceof Number) - { - final Number n = (Number) value; - return IntegerCache.getInteger(n.intValue()); - } - if (value instanceof String) - { - try - { - return IntegerCache.getInteger(Integer.parseInt((String) value)); - } - catch (NumberFormatException nfe) - { - //return null; // ignore - } - } - return null; - } - - private BufferState applyColumnsToPageBand(final BufferState contents, - final int numberOfColumns) - throws IOException, ReportProcessingException - { - if (numberOfColumns <= 1) - { - return contents; - } - startBuffering(getGlobalStylesCollection(), true); - // derive section style .. - - // This is a rather cheap solution to the problem. In a sane world, we would have to feed the - // footer multiple times. Right now, we simply rely on the balacing, which should make sure that - // the column's content are evenly distributed. - final XmlWriter writer = getXmlWriter(); - final AttributeList attrs = new AttributeList(); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, generateSectionStyle(numberOfColumns)); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, sectionNames.generateName("Section")); - writer.writeTag(OfficeNamespaces.TEXT_NS, "section", attrs, XmlWriterSupport.OPEN); - for (int i = 0; i < numberOfColumns; i++) - { - writer.writeStream(contents.getXmlAsReader()); - } - - writer.writeCloseTag(); - return finishBuffering(); - } - - private String generateSectionStyle(final int columnCount) - { - final OfficeStyles automaticStyles = getStylesCollection().getAutomaticStyles(); - final String styleName = getAutoStyleNameGenerator().generateName("auto_section_style"); - - final Section sectionProperties = new Section(); - sectionProperties.setNamespace(OfficeNamespaces.STYLE_NS); - sectionProperties.setType("section-properties"); - sectionProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, "transparent"); - sectionProperties.setAttribute(OfficeNamespaces.TEXT_NS, "dont-balance-text-columns", OfficeToken.FALSE); - sectionProperties.setAttribute(OfficeNamespaces.STYLE_NS, "editable", OfficeToken.FALSE); - - if (columnCount > 1) - { - final Section columns = new Section(); - columns.setNamespace(OfficeNamespaces.STYLE_NS); - columns.setType("columns"); - columns.setAttribute(OfficeNamespaces.FO_NS, "column-count", String.valueOf(columnCount)); - columns.setAttribute(OfficeNamespaces.STYLE_NS, "column-gap", "0cm"); - sectionProperties.addNode(columns); - -// final Section columnSep = new Section(); -// columnSep.setNamespace(OfficeNamespaces.STYLE_NS); -// columnSep.setType("column-sep"); -// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "width", "0.035cm"); -// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "color", "#000000"); -// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "height", "100%"); -// columns.addNode(columnSep); - - for (int i = 0; i < columnCount; i++) - { - final Section column = new Section(); - column.setNamespace(OfficeNamespaces.STYLE_NS); - column.setType("column"); - column.setAttribute(OfficeNamespaces.STYLE_NS, "rel-width", "1*"); - column.setAttribute(OfficeNamespaces.FO_NS, "start-indent", "0cm"); - column.setAttribute(OfficeNamespaces.FO_NS, "end-indent", "0cm"); - columns.addNode(column); - } - } - - final OfficeStyle style = new OfficeStyle(); - style.setNamespace(OfficeNamespaces.STYLE_NS); - style.setType("style"); - style.setAttribute(OfficeNamespaces.STYLE_NS, NAME, styleName); - style.setAttribute(OfficeNamespaces.STYLE_NS, "family", "section"); - style.addNode(sectionProperties); - - automaticStyles.addStyle(style); - return styleName; - } - - /** - * Starts the output of a new office document. This method writes the generic 'office:document-content' tag along with - * all known namespace declarations. - * - * @param report the report object. - * @throws org.jfree.report.DataSourceException - * if there was an error accessing the datasource - * @throws org.jfree.report.ReportProcessingException - * if some other error occured. - */ - public void startReport(final ReportStructureRoot report) - throws DataSourceException, ReportProcessingException - { - super.startReport(report); - variablesDeclarations = new VariablesDeclarations(); - detailBandProcessingState = DETAIL_SECTION_WAIT; - sectionNames.reset(); - - pageFooterOnReportFooter = false; - pageFooterOnReportHeader = false; - pageHeaderOnReportFooter = false; - pageHeaderOnReportHeader = false; - contentProcessingState = TextRawReportTarget.CP_SETUP; - - activePageContext.clear(); - activePageContext.push(new PageContext()); - - final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); - masterPageFactory = new MasterPageFactory(predefStyles.getMasterStyles()); - - predefStyles.getAutomaticStyles().addStyle(createVariablesStyle(true)); - predefStyles.getAutomaticStyles().addStyle(createVariablesStyle(false)); - } - - private OfficeStyle createVariablesStyle(final boolean keepWithNext) - { - final OfficeStyle variablesSectionStyle = new OfficeStyle(); - variablesSectionStyle.setStyleFamily(OfficeToken.PARAGRAPH); - if (keepWithNext) - { - variablesSectionStyle.setStyleName(TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); - } - else - { - variablesSectionStyle.setStyleName(TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT); - } - - final Section paragraphProps = new Section(); - paragraphProps.setNamespace(OfficeNamespaces.STYLE_NS); - paragraphProps.setType(PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, "transparent"); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "text-align", "start"); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_TOGETHER, ALWAYS); - paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-align", "top"); - variablesSectionStyle.addNode(paragraphProps); - - final Section textProps = new Section(); - textProps.setNamespace(OfficeNamespaces.STYLE_NS); - textProps.setType("text-properties"); - textProps.setAttribute(OfficeNamespaces.FO_NS, "font-variant", NORMAL); - textProps.setAttribute(OfficeNamespaces.FO_NS, "text-transform", NONE); - textProps.setAttribute(OfficeNamespaces.FO_NS, "color", "#ffffff"); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-outline", OfficeToken.FALSE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-blinking", OfficeToken.FALSE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-line-through-style", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-line-through-mode", "continuous"); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-position", "0% 100%"); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "font-name", "Tahoma"); - textProps.setAttribute(OfficeNamespaces.FO_NS, "font-size", "1pt"); - textProps.setAttribute(OfficeNamespaces.FO_NS, "letter-spacing", NORMAL); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "letter-kerning", OfficeToken.FALSE); - textProps.setAttribute(OfficeNamespaces.FO_NS, "font-style", NORMAL); - textProps.setAttribute(OfficeNamespaces.FO_NS, "text-shadow", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-underline-style", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-underline-mode", "continuous"); - textProps.setAttribute(OfficeNamespaces.FO_NS, "font-weight", NORMAL); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-rotation-angle", "0"); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-emphasize", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine-start-char", ""); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine-end-char", ""); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-blinking", OfficeToken.FALSE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-scale", "100%"); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "font-relief", NONE); - textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-display", NONE); - variablesSectionStyle.addNode(textProps); - return variablesSectionStyle; - } - - protected void startContent(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "text", null, XmlWriterSupport.OPEN); - - writeNullDate(); - - // now start the buffering. We have to insert the variables declaration - // later .. - startBuffering(getStylesCollection(), true); - - final Object columnCountRaw = attrs.getAttribute(OfficeNamespaces.FO_NS, "column-count"); - final Integer colCount = parseInt(columnCountRaw); - if (colCount != null) - { - final PageContext pageContext = getCurrentContext(); - pageContext.setColumnCount(colCount); - } - - } - - protected void startOther(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - - if (ObjectUtilities.equal(JFreeReportInfo.REPORT_NAMESPACE, namespace)) - { - if (ObjectUtilities.equal(OfficeToken.IMAGE, elementType)) - { - startImageProcessing(attrs); - } - else if (ObjectUtilities.equal(OfficeToken.OBJECT_OLE, elementType) && getCurrentRole() != ROLE_TEMPLATE) - { - startChartProcessing(attrs); - } - return; - } - else if (isFilteredNamespace(namespace)) - { - throw new IllegalStateException("This element should be hidden: " + namespace + ", " + elementType); - } - - if (isTableMergeActive() && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace) && ObjectUtilities.equal(OfficeToken.TABLE_COLUMNS, elementType)) - { - // Skip the columns section if the tables get merged.. - startBuffering(getStylesCollection(), true); - } - else - { - openSection(); - - final boolean isTableNS = ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace); - if (isTableNS) - { - if (ObjectUtilities.equal(OfficeToken.TABLE, elementType)) - { - startTable(attrs); - return; - } - - if (ObjectUtilities.equal(OfficeToken.TABLE_ROW, elementType)) - { - startRow(attrs); - return; - } - } - - - if (ObjectUtilities.equal(OfficeNamespaces.TEXT_NS, namespace)) - { - if (ObjectUtilities.equal("variable-set", elementType)) - { - // update the variables-declaration thingie .. - final String varName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, NAME); - final String varType = (String) attrs.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); - final String newVarName = variablesDeclarations.produceVariable(varName, varType); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, newVarName); - } - else if (ObjectUtilities.equal("variable-get", elementType)) - { - final String varName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, NAME); - final String varType = (String) attrs.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); - final String newVarName = variablesDeclarations.produceVariable(varName, varType); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, newVarName); - // this one must not be written, as the DTD does not declare it. - // attrs.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, null); - } - } - - if (tableLayoutConfig == TABLE_LAYOUT_VARIABLES_PARAGRAPH && variables != null) - { - // This cannot happen as long as the report sections only contain tables. But at some point in the - // future they will be made of paragraphs, and then we are prepared .. - // LOGGER.debug("Variables-Section in own paragraph " + variables); - - StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), - getGlobalStylesCollection(), getPredefinedStylesCollection()); - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.OPEN); - xmlWriter.writeText(variables); - xmlWriter.writeCloseTag(); - variables = null; - } - - final boolean keepTogetherOnParagraph = true; - - if (keepTogetherOnParagraph) - { - if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TEXT_NS, OfficeToken.P, attrs)) - { - final int keepTogetherState = getCurrentContext().getKeepTogether(); - if (!firstCellSeen && (sectionKeepTogether || keepTogetherState == PageContext.KEEP_TOGETHER_GROUP)) - { - OfficeStyle style = null; - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME); - if (styleName == null) - { - final boolean keep = (keepTogetherState == PageContext.KEEP_TOGETHER_GROUP || expectedTableRowCount > 0) && isParentKeepTogether(); - final ArrayList propertyNameSpaces = new ArrayList(); - final ArrayList propertyNames = new ArrayList(); - final ArrayList propertyValues = new ArrayList(); - - propertyNameSpaces.add(OfficeNamespaces.FO_NS); - propertyNameSpaces.add(OfficeNamespaces.FO_NS); - propertyNames.add(KEEP_TOGETHER); - propertyValues.add(ALWAYS); - if (keep) - { - propertyNames.add(KEEP_WITH_NEXT); - propertyValues.add(ALWAYS); - } - else - { - propertyNames.add(KEEP_WITH_NEXT); - propertyValues.add(null); - } - style = StyleUtilities.queryStyleByProperties(getStylesCollection(), OfficeToken.PARAGRAPH, PARAGRAPH_PROPERTIES, propertyNameSpaces, propertyNames, propertyValues); - } - if (style == null) - { - style = deriveStyle(OfficeToken.PARAGRAPH, styleName); - // Lets set the 'keep-together' flag.. - - Element paragraphProps = style.getParagraphProperties(); - if (paragraphProps == null) - { - paragraphProps = new Section(); - paragraphProps.setNamespace(OfficeNamespaces.STYLE_NS); - paragraphProps.setType(PARAGRAPH_PROPERTIES); - style.addNode(paragraphProps); - } - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_TOGETHER, ALWAYS); - - // We prevent pagebreaks within the two adjacent rows (this one and the next one) if - // either a group-wide keep-together is defined or if we haven't reached the end of the - // current section yet. - if ((keepTogetherState == PageContext.KEEP_TOGETHER_GROUP || expectedTableRowCount > 0) && isParentKeepTogether()) - { - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); - } - } - - attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, style.getStyleName()); - } - } - } - - if (ObjectUtilities.equal(OfficeNamespaces.DRAWING_NS, namespace) && ObjectUtilities.equal(OfficeToken.FRAME, elementType)) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME); - final OfficeStyle predefAutoStyle = getPredefinedStylesCollection().getAutomaticStyles().getStyle(OfficeToken.GRAPHIC, styleName); - if (predefAutoStyle != null) - { - // special ole handling - final Element graphicProperties = predefAutoStyle.getGraphicProperties(); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, VERTICAL_POS, "from-top"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, HORIZONTAL_POS, "from-left"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-rel", "paragraph-content"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "horizontal-rel", "paragraph"); - graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "flow-with-text", "false"); - graphicProperties.setAttribute(OfficeNamespaces.DRAWING_NS, "ole-draw-aspect", "1"); - - // attrs.setAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME, predefAutoStyle.getStyleName()); - } - } - - // process the styles as usual - performStyleProcessing(attrs); - final XmlWriter xmlWriter = getXmlWriter(); - final AttributeList attrList = buildAttributeList(attrs); - xmlWriter.writeTag(namespace, elementType, attrList, XmlWriterSupport.OPEN); - - if (tableLayoutConfig != TABLE_LAYOUT_VARIABLES_PARAGRAPH - && variables != null - && !isRepeatingSection() - && ReportTargetUtil.isElementOfType(OfficeNamespaces.TEXT_NS, OfficeToken.P, attrs)) - { - //LOGGER.debug("Variables-Section in existing cell " + variables); - xmlWriter.writeText(variables); - variables = null; - } - } - } - - private void startRow(final AttributeMap attrs) - throws IOException, ReportProcessingException - { - firstCellSeen = false; - expectedTableRowCount -= 1; - final String rowStyle = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - final CSSNumericValue rowHeight = computeRowHeight(rowStyle); - // LOGGER.debug("Adding row-Style: " + rowStyle + " " + rowHeight); - sectionHeight.add(rowHeight); - -// if (expectedTableRowCount > 0) -// { -// // Some other row. Create a keep-together -// -// } -// else -// { -// // This is the last row before the section will end. -// // or (in some weird cases) There is no information when the row will end. -// // Anyway, if we are here, we do not create a keep-together style on the table-row .. -// } - // process the styles as usual - performStyleProcessing(attrs); - - final AttributeList attrList = buildAttributeList(attrs); - getXmlWriter().writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrList, XmlWriterSupport.OPEN); - } - - private void startTable(final AttributeMap attrs) - throws ReportProcessingException, IOException - { - final Integer trc = (Integer) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "table-row-count"); - if (trc == null) - { - expectedTableRowCount = -1; - } - else - { - expectedTableRowCount = trc; - } - - if (isSectionPagebreakBefore(attrs)) - { - // force a pagebreak .. - setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); - } - - // its a table. This means, it is a root-level element - final PageBreakDefinition breakDefinition; - String masterPageName = null; - final int currentRole = getCurrentRole(); - if (contentProcessingState == TextRawReportTarget.CP_FIRST_TABLE) - { - contentProcessingState = TextRawReportTarget.CP_NEXT_TABLE; - - // Processing the report header now. - if (currentRole == OfficeDocumentReportTarget.ROLE_REPORT_HEADER) - { - breakDefinition = new PageBreakDefinition(isResetPageNumber()); - masterPageName = createMasterPage(pageHeaderOnReportHeader, pageFooterOnReportHeader); - if (masterPageName == null) - { - // we should always have a master-page ... - masterPageName = currentMasterPage.getStyleName(); - } - } - else if (currentRole == OfficeDocumentReportTarget.ROLE_REPORT_FOOTER) - { - breakDefinition = new PageBreakDefinition(isResetPageNumber()); - masterPageName = createMasterPage(pageHeaderOnReportFooter, pageFooterOnReportFooter); - if (masterPageName == null && isSectionPagebreakBefore(attrs)) - { - // If we have a manual pagebreak, then activate the current master-page again. - masterPageName = currentMasterPage.getStyleName(); - } - // But we skip this (and therefore the resulting pagebreak) if there is no manual break - // and no other condition that would force an break. - } - else if (currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) - { - breakDefinition = null; - // no pagebreaks .. - } - else if (currentMasterPage == null || isPagebreakPending()) - { - // Must be the first table, as we have no master-page yet. - masterPageName = createMasterPage(true, true); - setPagebreakDefinition(null); - if (masterPageName == null) - { - // we should always have a master-page ... - masterPageName = currentMasterPage.getStyleName(); - } - breakDefinition = new PageBreakDefinition(isResetPageNumber()); - } - else - { - breakDefinition = null; - } - } - else if (isPagebreakPending() && currentRole != OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER && currentRole != OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) - { - // Derive an automatic style for the pagebreak. -// LOGGER.debug("Manual pagebreak (within the section): " + getCurrentRole()); - breakDefinition = getPagebreakDefinition(); - setPagebreakDefinition(null); - masterPageName = createMasterPage(true, true); - if (masterPageName == null || isSectionPagebreakBefore(attrs)) - { - // If we have a manual pagebreak, then activate the current master-page again. - masterPageName = currentMasterPage.getStyleName(); - } - } - else - { - breakDefinition = null; - } - - final XmlWriter xmlWriter = getXmlWriter(); - if (detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && masterPageName != null) - { - // close the last table-tag, we will open a new one - xmlWriter.writeCloseTag(); - // Reset the detail-state to 'started' so that the table's columns get printed now. - detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; - } - - if (tableLayoutConfig == TABLE_LAYOUT_VARIABLES_PARAGRAPH && variables != null) - { - if (masterPageName != null) - { - // write a paragraph that uses the VARIABLES_HIDDEN_STYLE as - // primary style. Derive that one and add the manual pagebreak. - // The predefined style already has the 'keep-together' flags set. -// LOGGER.debug("Variables-Section with new Master-Page " + variables + " " + masterPageName); - - final OfficeStyle style = deriveStyle(OfficeToken.PARAGRAPH, TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); - style.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); - if (breakDefinition.isResetPageNumber()) - { - final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); - } - if (isColumnBreakPending()) - { - final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "break-before", "column"); - setColumnBreakPending(false); - } - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, style.getStyleName(), XmlWriterSupport.OPEN); - - masterPageName = null; - //breakDefinition = null; - } - else if (isColumnBreakPending()) - { - setColumnBreakPending(false); - - final OfficeStyle style = deriveStyle(OfficeToken.PARAGRAPH, TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); - final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); - - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, style.getStyleName(), XmlWriterSupport.OPEN); - } - else - { - // Write a paragraph without adding the pagebreak. We can reuse the global style, but we have to make - // sure that the style is part of the current 'auto-style' collection. -// LOGGER.debug("Variables-Section " + variables); - - StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), - getGlobalStylesCollection(), getPredefinedStylesCollection()); - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.OPEN); - } - xmlWriter.writeText(variables); - xmlWriter.writeCloseTag(); - variables = null; - } - - final boolean keepWithNext = isKeepTableWithNext(); - final boolean localKeepTogether = OfficeToken.TRUE.equals(attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, KEEP_TOGETHER)); - final boolean tableMergeActive = isTableMergeActive(); - this.sectionKeepTogether = tableMergeActive && localKeepTogether; - - // Check, whether we have a reason to derive a style... - if (masterPageName != null || (!tableMergeActive && (localKeepTogether || keepWithNext)) || isColumnBreakPending()) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - final OfficeStyle style = deriveStyle("table", styleName); - - if (masterPageName != null) - { -// LOGGER.debug("Starting a new MasterPage: " + masterPageName); - // Patch the current styles. - // This usually only happens on Table-Styles or Paragraph-Styles - style.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); - if (breakDefinition.isResetPageNumber()) - { - final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); - } - } - if (isColumnBreakPending()) - { - final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); - paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "break-before", "column"); - setColumnBreakPending(false); - } - - // Inhibit breaks inside the table only if it has been defined and if we do not create one single - // big detail section. In that case, this flag would be invalid and would cause layout-errors. - if (!tableMergeActive) - { - if (localKeepTogether) - { - final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); - tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); - } - } - else - { - if (detailBandProcessingState == DETAIL_SECTION_WAIT) - { - detailBandProcessingState = DETAIL_SECTION_FIRST_STARTED; - } - else if (detailBandProcessingState == DETAIL_SECTION_FIRST_PRINTED) - { - detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; - } - } - if (keepWithNext) - { - boolean addKeepWithNext = true; - if (currentRole == ROLE_GROUP_FOOTER) - { - addKeepWithNext = isParentKeepTogether(); - } - - final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); - tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); - if (addKeepWithNext) - { - tableProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); - // A keep-with-next does not work, if the may-break-betweek rows is not set to false .. - } - } - attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); - // no need to copy the styles, this was done while deriving the - // style .. - } - else - { - // Check, whether we may be able to skip the table. - if (tableMergeActive) - { - if (detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED) - { - // Skip the whole thing .. - return; - } - else if (detailBandProcessingState == DETAIL_SECTION_WAIT) - { - if (keepWithNext) - { - final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); - - final OfficeStyle style = deriveStyle(OfficeToken.TABLE, styleName); - final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); - // A keep-with-next does not work, if the may-break-betweek rows is not set to false .. - tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); - final String hasGroupFooter = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "has-group-footer"); - if (hasGroupFooter != null && hasGroupFooter.equals(OfficeToken.TRUE)) - { - tableProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); - } - - attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); - } - detailBandProcessingState = DETAIL_SECTION_FIRST_STARTED; - } - else if (detailBandProcessingState == DETAIL_SECTION_FIRST_PRINTED) - { - detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; - } - } - - // process the styles as usual - performStyleProcessing(attrs); - } - - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - final AttributeList attrList = buildAttributeList(attrs); - xmlWriter.writeTag(namespace, elementType, attrList, XmlWriterSupport.OPEN); - } - - private boolean isParentKeepTogether() - { - PageContext context = getCurrentContext(); - if (context != null) - { - context = context.getParent(); - if (context != null) - { - return context.getKeepTogether() == PageContext.KEEP_TOGETHER_GROUP; - } - } - return false; - } - - private boolean isTableMergeActive() - { - return getCurrentRole() == ROLE_DETAIL && tableLayoutConfig == TABLE_LAYOUT_SINGLE_DETAIL_TABLE; - } - - private void openSection() - throws IOException - { - if (isRepeatingSection()) - { - // repeating sections have other ways of defining columns .. - return; - } - if (getCurrentRole() == ROLE_TEMPLATE || getCurrentRole() == ROLE_SPREADSHEET_PAGE_HEADER || getCurrentRole() == ROLE_SPREADSHEET_PAGE_FOOTER) - { - // the template section would break the multi-column stuff and we dont open up sections there - // anyway .. - return; - } - - final PageContext pageContext = getCurrentContext(); - final Integer columnCount = pageContext.getColumnCount(); - if (columnCount != null && !pageContext.isSectionOpen()) - { - final AttributeList attrs = new AttributeList(); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, generateSectionStyle(columnCount)); - attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, sectionNames.generateName("Section")); - getXmlWriter().writeTag(OfficeNamespaces.TEXT_NS, "section", attrs, XmlWriterSupport.OPEN); - - pageContext.setSectionOpen(true); - } - - } - - protected void startReportSection(final AttributeMap attrs, final int role) - throws IOException, DataSourceException, ReportProcessingException - { - sectionHeight = new LengthCalculator(); - if (role == OfficeDocumentReportTarget.ROLE_TEMPLATE || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) - { - // Start buffering with an dummy styles-collection, so that the global styles dont get polluted .. - startBuffering(new OfficeStylesCollection(), true); - } - else if (role == OfficeDocumentReportTarget.ROLE_PAGE_HEADER) - { - startBuffering(getGlobalStylesCollection(), true); - pageHeaderOnReportHeader = PageSection.isPrintWithReportHeader(attrs); - pageHeaderOnReportFooter = PageSection.isPrintWithReportFooter(attrs); - } - else if (role == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER) - { - startBuffering(getGlobalStylesCollection(), true); - pageFooterOnReportHeader = PageSection.isPrintWithReportHeader(attrs); - pageFooterOnReportFooter = PageSection.isPrintWithReportFooter(attrs); - } - else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) - { - startBuffering(getGlobalStylesCollection(), true); - } - else if (role == OfficeDocumentReportTarget.ROLE_VARIABLES) - { - startBuffering(getGlobalStylesCollection(), false); - } - else - { - contentProcessingState = TextRawReportTarget.CP_FIRST_TABLE; - if (role == OfficeDocumentReportTarget.ROLE_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_GROUP_FOOTER) - { - // if we have a repeating header, then skip the first one .. - // if this is a repeating footer, skip the last one. This means, - // we have to buffer all group footers and wait for the next section.. - startBuffering(getContentStylesCollection(), true); - } - - if (role != OfficeDocumentReportTarget.ROLE_DETAIL) - { - // reset the detail-state. The flag will be updated on startTable and endOther(Table) if the - // current role is ROLE_DETAIL - detailBandProcessingState = DETAIL_SECTION_WAIT; - } - } - } - - protected void startGroup(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - super.startGroup(attrs); - final PageContext pageContext = new PageContext(getCurrentContext()); - activePageContext.push(pageContext); - - final Object resetPageNumber = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "reset-page-number"); - if (OfficeToken.TRUE.equals(resetPageNumber)) - { - setPagebreakDefinition(new PageBreakDefinition(true)); - } - - final Object keepTogether = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, KEEP_TOGETHER); - if ("whole-group".equals(keepTogether)) - { - pageContext.setKeepTogether(PageContext.KEEP_TOGETHER_GROUP); - } - else if ("with-first-detail".equals(keepTogether) && pageContext.getKeepTogether() != PageContext.KEEP_TOGETHER_GROUP) - { - pageContext.setKeepTogether(PageContext.KEEP_TOGETHER_FIRST_DETAIL); - } - - final Object columnCountRaw = attrs.getAttribute(OfficeNamespaces.FO_NS, "column-count"); - final Integer colCount = parseInt(columnCountRaw); - if (colCount != null) - { - pageContext.setColumnCount(colCount); - } - - final Object newColumn = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "start-new-column"); - if (OfficeToken.TRUE.equals(newColumn)) - { - setColumnBreakPending(true); - } - } - - protected void startGroupInstance(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - if (getGroupContext().isGroupWithRepeatingSection()) - { - setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); - } - } - - protected void endGroup(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - if (getGroupContext().isGroupWithRepeatingSection()) - { - setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); - } - - super.endGroup(attrs); - finishSection(); - - activePageContext.pop(); - } - - private void finishSection() - throws ReportProcessingException - { - final PageContext pageContext = getCurrentContext(); - if (pageContext.isSectionOpen()) - { - pageContext.setSectionOpen(false); - try - { - getXmlWriter().writeCloseTag(); - } - catch (IOException e) - { - throw new ReportProcessingException("IOError", e); - } - } - } - - protected void endReportSection(final AttributeMap attrs, final int role) - throws IOException, DataSourceException, ReportProcessingException - { - if (role == ROLE_TEMPLATE || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) - { - finishBuffering(); - return; - } - - final CSSNumericValue result = sectionHeight.getResult(); - if (role == OfficeDocumentReportTarget.ROLE_PAGE_HEADER) - { - final PageContext pageContext = getCurrentContext(); - pageContext.setHeader(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); - } - else if (role == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER) - { - final PageContext pageContext = getCurrentContext(); - pageContext.setFooter(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); - } - else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER) - { - final PageContext pageContext = getCurrentContext(); - pageContext.setHeader(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); - } - else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) - { - final PageContext pageContext = getCurrentContext(); - pageContext.setFooter(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); - } - else if (role == OfficeDocumentReportTarget.ROLE_VARIABLES) - { - if (variables == null) - { - variables = finishBuffering().getXmlBuffer(); - } - else - { - variables += finishBuffering().getXmlBuffer(); - } - } - else if (role == OfficeDocumentReportTarget.ROLE_GROUP_HEADER) - { - final String headerText = finishBuffering().getXmlBuffer(); - final int iterationCount = getGroupContext().getParent().getIterationCount(); - final boolean repeat = OfficeToken.TRUE.equals(attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "repeat-section")); - if (!repeat || iterationCount > 0) - { - getXmlWriter().writeText(headerText); - } - } - else if (role == OfficeDocumentReportTarget.ROLE_GROUP_FOOTER) - { - final String footerText = finishBuffering().getXmlBuffer(); - // how do we detect whether this is the last group footer? - getXmlWriter().writeText(footerText); - } - - } - - public void endReport(final ReportStructureRoot report) - throws DataSourceException, ReportProcessingException - { - super.endReport(report); - variablesDeclarations = null; - - try - { - // Write the settings .. - final AttributeList rootAttributes = new AttributeList(); - rootAttributes.addNamespaceDeclaration("office", OfficeNamespaces.OFFICE_NS); - rootAttributes.addNamespaceDeclaration("config", OfficeNamespaces.CONFIG); - rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); - rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", - OfficeDocumentReportTarget.ODF_VERSION); - final OutputStream outputStream = getOutputRepository().createOutputStream("settings.xml", "text/xml"); - final XmlWriter xmlWriter = new XmlWriter(new OutputStreamWriter(outputStream, "UTF-8"), createTagDescription()); - xmlWriter.setAlwaysAddNamespace(true); - xmlWriter.writeXmlDeclaration("UTF-8"); - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "document-settings", rootAttributes, XmlWriterSupport.OPEN); - xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "settings", XmlWriterSupport.OPEN); - xmlWriter.writeTag(OfficeNamespaces.CONFIG, "config-item-set", NAME, "ooo:configuration-settings", XmlWriterSupport.OPEN); - - final AttributeList configAttributes = new AttributeList(); - configAttributes.setAttribute(OfficeNamespaces.CONFIG, NAME, "TableRowKeep"); - configAttributes.setAttribute(OfficeNamespaces.CONFIG, "type", "boolean"); - xmlWriter.writeTag(OfficeNamespaces.CONFIG, "config-item", configAttributes, XmlWriterSupport.OPEN); - xmlWriter.writeText(OfficeToken.TRUE); - xmlWriter.writeCloseTag(); - - xmlWriter.writeCloseTag(); - xmlWriter.writeCloseTag(); - xmlWriter.writeCloseTag(); - xmlWriter.close(); - - copyMeta(); - } - catch (IOException ioe) - { - throw new ReportProcessingException("Failed to write settings document"); - } - } - - protected void endOther(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); - final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); - - final boolean isInternalNS = ObjectUtilities.equal(JFreeReportInfo.REPORT_NAMESPACE, namespace); - final boolean isTableNs = ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace); - if (isTableMergeActive() && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && isTableNs && ObjectUtilities.equal(OfficeToken.TABLE_COLUMNS, elementType)) - { - finishBuffering(); - return; - } - - if (isInternalNS && (ObjectUtilities.equal(OfficeToken.IMAGE, elementType) || ObjectUtilities.equal(OfficeToken.OBJECT_OLE, elementType))) - { - return; - } - - final XmlWriter xmlWriter = getXmlWriter(); - if (tableLayoutConfig != TABLE_LAYOUT_VARIABLES_PARAGRAPH && isTableNs && ObjectUtilities.equal(OfficeToken.TABLE_CELL, elementType) && !isRepeatingSection()) - { - if (variables != null) - { - // This cannot happen as long as the report sections only contain tables. But at some point in the - // future they will be made of paragraphs, and then we are prepared .. - //LOGGER.debug("Variables-Section " + variables); - final String tag; - if (sectionKeepTogether && expectedTableRowCount > 0) - { - tag = TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT; - } - else - { - tag = TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT; - } - StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, - tag, getStylesCollection(), - getGlobalStylesCollection(), getPredefinedStylesCollection()); - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, - tag, XmlWriterSupport.OPEN); - xmlWriter.writeText(variables); - xmlWriter.writeCloseTag(); - variables = null; - } - /** - // Only generate the empty paragraph, if we have to add the keep-together .. - else if (cellEmpty && expectedTableRowCount > 0 && - sectionKeepTogether && !firstCellSeen) - { - // we have no variables .. - StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), - getGlobalStylesCollection(), getPredefinedStylesCollection()); - xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, - TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.CLOSE); - } - */ - } - - if (isTableNs && (ObjectUtilities.equal(OfficeToken.TABLE_CELL, elementType) || ObjectUtilities.equal(OfficeToken.COVERED_TABLE_CELL, elementType))) - { - firstCellSeen = true; - } - if (isTableNs && ObjectUtilities.equal(OfficeToken.TABLE, elementType)) - { - if (getCurrentRole() == ROLE_DETAIL) - { - if (!isTableMergeActive()) - { - // We do not merge the detail bands, so an ordinary close will do. - xmlWriter.writeCloseTag(); - } - else if (detailBandProcessingState == DETAIL_SECTION_FIRST_STARTED) - { - final int keepTogetherState = getCurrentContext().getKeepTogether(); - if (keepTogetherState == PageContext.KEEP_TOGETHER_FIRST_DETAIL) - { - xmlWriter.writeCloseTag(); - detailBandProcessingState = DETAIL_SECTION_FIRST_PRINTED; - } - else - { - detailBandProcessingState = DETAIL_SECTION_OTHER_PRINTED; - } - } - else if (detailBandProcessingState == DETAIL_SECTION_OTHER_STARTED) - { - detailBandProcessingState = DETAIL_SECTION_OTHER_PRINTED; - } - } - else - { - xmlWriter.writeCloseTag(); - } - if (isSectionPagebreakAfter(attrs)) - { - setPagebreakDefinition(new PageBreakDefinition(false)); - } - } - else - { - xmlWriter.writeCloseTag(); - } - } - - protected void endGroupBody(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - if (tableLayoutConfig == TABLE_LAYOUT_SINGLE_DETAIL_TABLE && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED) - { - // closes the table .. - final XmlWriter xmlWriter = getXmlWriter(); - xmlWriter.writeCloseTag(); - detailBandProcessingState = DETAIL_SECTION_WAIT; - } - - } - - protected void endContent(final AttributeMap attrs) - throws IOException, DataSourceException, ReportProcessingException - { - finishSection(); - final BufferState bodyText = finishBuffering(); - final XmlWriter writer = getXmlWriter(); - - final Map definedMappings = variablesDeclarations.getDefinedMappings(); - if (!definedMappings.isEmpty()) - { - writer.writeTag(OfficeNamespaces.TEXT_NS, "variable-decls", XmlWriterSupport.OPEN); - final Iterator mappingsIt = definedMappings.entrySet().iterator(); - while (mappingsIt.hasNext()) - { - final Map.Entry entry = (Map.Entry) mappingsIt.next(); - final AttributeList entryList = new AttributeList(); - entryList.setAttribute(OfficeNamespaces.TEXT_NS, NAME, (String) entry.getKey()); - entryList.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, (String) entry.getValue()); - writer.writeTag(OfficeNamespaces.TEXT_NS, "variable-decl", entryList, XmlWriterSupport.CLOSE); - } - writer.writeCloseTag(); - } - - writer.writeStream(bodyText.getXmlAsReader()); - writer.setLineEmpty(true); - writer.writeCloseTag(); - } - - public String getExportDescriptor() - { - return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_TEXT; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations.java b/reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations.java deleted file mode 100644 index a15877c73fc4..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.output.text; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.jfree.report.util.AttributeNameGenerator; - - -/** - * A collection that holds all used variables. A variable is primarily keyed by - * its original name. If a variable contains more than one type, it is also - * keyed by the type. - * - * @since 26.03.2007 - */ -public class VariablesDeclarations -{ - - private final AttributeNameGenerator nameGenerator; - private final Map > variables; - - public VariablesDeclarations() - { - variables = new HashMap >(); - nameGenerator = new AttributeNameGenerator(); - } - - public String produceVariable(final String name, - final String type) - { - HashMap holder = variables.get(name); - if (holder == null) - { - holder = new HashMap(); - variables.put(name, holder); - } - - final String mapping = holder.get(type); - if (mapping != null) - { - return mapping; - } - final String result = nameGenerator.generateName(name); - if (holder.isEmpty()) - { - // create the default mapping as well.. - holder.put(null, name); - holder.put("time", name); - holder.put("date", name); - holder.put("datetime", name); - holder.put("float", name); - holder.put("string", name); - holder.put("boolean", name); - } - holder.put(type, name); - return result; - } - - public Map getDefinedMappings() - { - final HashMap mappings = new HashMap(); - final Iterator> vars = variables.values().iterator(); - while (vars.hasNext()) - { - final HashMap types = vars.next(); - final Iterator> varsByType = types.entrySet().iterator(); - while (varsByType.hasNext()) - { - final Map.Entry entry = varsByType.next(); - final String type = entry.getKey(); - if (type != null) - { - final String varName = entry.getValue(); - mappings.put(varName, type); - } - } - } - return mappings; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification.java deleted file mode 100644 index 5ced8e212225..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -public final class AttributeSpecification -{ - - private final String namespaceUrl; - private final String attributName; - private final String mapperImplementation; - - public AttributeSpecification(String namespaceUrl, String attributName, String mapperImplementation) - { - this.namespaceUrl = namespaceUrl; - this.attributName = attributName; - this.mapperImplementation = mapperImplementation; - } - - public String getAttributName() - { - return attributName; - } - - public String getMapperImplementation() - { - return mapperImplementation; - } - - public String getNamespaceUrl() - { - return namespaceUrl; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler.java deleted file mode 100644 index 2a71ddf65496..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Creation-Date: 03.07.2006, 14:22:34 - * - */ -public abstract class ElementReadHandler extends AbstractXmlReadHandler -{ - - public ElementReadHandler() - { - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - final Element element = getElement(); - copyElementType(element); - copyAttributes(attrs, element); - } - - protected void copyElementType(final Element element) - { - element.setType(getTagName()); - element.setNamespace(getUri()); - } - - protected void copyAttributes(final Attributes attrs, final Element element) - { - final int length = attrs.getLength(); - for (int i = 0; i < length; i++) - { - final String value = attrs.getValue(i); - final String namespace = attrs.getURI(i); - final String attr = attrs.getLocalName(i); - element.setAttribute(namespace, attr, value); - } - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() throws SAXException - { - return getElement(); - } - - public abstract Element getElement(); -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java deleted file mode 100644 index 4da2eca96edf..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import com.sun.star.report.pentaho.model.OfficeDocument; - -import org.jfree.report.modules.factories.report.base.JFreeReportXmlResourceFactory; - -/** - * A LibLoader resource factory for OfficeDocument objects. OfficeDocuments are - * JFreeReport instances which have some additional properties. - * - * @since 09.03.2007 - */ -public class OfficeDocumentXmlResourceFactory extends JFreeReportXmlResourceFactory -{ - - public OfficeDocumentXmlResourceFactory() - { - } - - public Class getFactoryType() - { - return OfficeDocument.class; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil.java deleted file mode 100644 index 287eaca2dfc3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.layouting.namespace.NamespaceDefinition; -import org.jfree.layouting.namespace.Namespaces; -import org.jfree.report.JFreeReportBoot; - -import org.pentaho.reporting.libraries.base.config.DefaultConfiguration; -import org.pentaho.reporting.libraries.resourceloader.Resource; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - - -public class OfficeParserUtil -{ - - private static final Log LOGGER = LogFactory.getLog(OfficeParserUtil.class); - private static OfficeParserUtil instance; - private static final String NAMESPACES_PREFIX = "namespaces."; - - public static synchronized OfficeParserUtil getInstance() - { - if (instance == null) - { - instance = new OfficeParserUtil(); - } - return instance; - } - private final DefaultConfiguration props; - private final NamespaceDefinition[] namespaces; - - private OfficeParserUtil() - { - props = new DefaultConfiguration(); - - final ResourceManager resourceManager = new ResourceManager(); - resourceManager.registerDefaults(); - try - { - final Resource res = resourceManager.createDirectly("res://com/sun/star/report/pentaho/parser/selectors.properties", Properties.class); - final Properties resProps = (Properties) res.getResource(); - props.putAll(resProps); - } - catch (ResourceException e) - { - LOGGER.warn("Unable to load mapping rules. Parsing services may not be available.", e); - } - - namespaces = Namespaces.createFromConfig(JFreeReportBoot.getInstance().getGlobalConfig(), - "org.jfree.report.namespaces.", resourceManager); - } - - public NamespaceDefinition getNamespaceDeclaration(final String uri) - { - if (uri == null) - { - throw new NullPointerException("URI must not be null"); - } - - for (int i = 0; i < namespaces.length; i++) - { - final NamespaceDefinition definition = namespaces[i]; - if (uri.equals(definition.getURI())) - { - return definition; - } - } - return null; - } - - public String getGenericFont(final String officeFont) - { - return props.getProperty("font-family." + officeFont.toLowerCase(), officeFont); - } - - public String getNamespaceURI(final String namespacePrefix) - { - return props.getProperty(NAMESPACES_PREFIX + namespacePrefix); - } - - public String getNamespaceForStyleFamily(final String styleFamily) - { - return props.getProperty("style-family." + styleFamily); - } - - public Map getNamespaces() - { - final Map map = new HashMap(); - final Iterator keys = props.findPropertyKeys(NAMESPACES_PREFIX); - while (keys.hasNext()) - { - final String key = (String) keys.next(); - final String value = props.getConfigProperty(key); - map.put(key.substring(NAMESPACES_PREFIX.length()), value); - } - return map; - } - - public String getNamespacePrefix(final String namespaceURI) - { - final Iterator keys = props.findPropertyKeys(NAMESPACES_PREFIX); - while (keys.hasNext()) - { - final String key = (String) keys.next(); - final String value = props.getConfigProperty(key); - if (namespaceURI.equals(value)) - { - return key.substring(NAMESPACES_PREFIX.length()); - } - } - return null; - } - - public AttributeSpecification parseStyleAttrDefinition(final String key, final String prefix, final String tagname) - { - final String configPrefix = "attr." + prefix + "." + tagname + "."; - final String configSuffix = key.substring(configPrefix.length()); - final int dotPosition = configSuffix.indexOf('.'); - if (dotPosition == -1) - { - return null; - } - final String namespaceUri = getNamespaceURI(configSuffix.substring(0, dotPosition)); - final String attrName = configSuffix.substring(dotPosition + 1); - final String value = props.getProperty(key); - return new AttributeSpecification(namespaceUri, attrName, value); - } - - public Iterator findStylesForElement(final String prefix, - final String tagname) - { - final String configPrefix = "attr." + prefix + "." + tagname + "."; - return props.findPropertyKeys(configPrefix); - } - - public boolean isValidStyleElement(final String uri, final String tagName) - { - final String prefix = getNamespacePrefix(uri); - if (prefix == null) - { - return false; - } - - final Iterator stylesForElement = findStylesForElement(prefix, tagName); - return stylesForElement.hasNext(); - } - - public String getSelectorPattern() - { - return props.getConfigProperty("style-selector.pattern"); - } - - public static void main(final String[] args) - { - JFreeReportBoot.getInstance().start(); - System.out.print(OfficeParserUtil.getInstance().getNamespaces()); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory.java deleted file mode 100644 index ba94dd5b030c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import com.sun.star.report.pentaho.model.OfficeStylesCollection; - -import org.jfree.report.JFreeReportBoot; - -import org.pentaho.reporting.libraries.base.config.Configuration; -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlResourceFactory; - -/** - * A LibLoader resource factory for loading an OfficeStyles-collection. This - * implementation is meant to parse the 'styles.xml' file. - * - * @since 09.03.2007 - */ -public class OfficeStylesXmlResourceFactory extends AbstractXmlResourceFactory -{ - - public OfficeStylesXmlResourceFactory() - { - } - - protected Configuration getConfiguration() - { - return JFreeReportBoot.getInstance().getGlobalConfig(); - } - - public Class getFactoryType() - { - return OfficeStylesCollection.class; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule.java deleted file mode 100644 index f2c856cf358c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.office.DocumentStylesReadHandler; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; -import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -public class StarStyleXmlFactoryModule implements XmlFactoryModule -{ - - public StarStyleXmlFactoryModule() - { - } - - public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) - { - return new DocumentStylesReadHandler(); - } - - public int getDocumentSupport(final XmlDocumentInfo documentInfo) - { - final String rootNamespace = documentInfo.getRootElementNameSpace(); - if (OfficeNamespaces.OFFICE_NS.equals(rootNamespace) && "document-styles".equals(documentInfo.getRootElement())) - { - return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; - } - return XmlFactoryModule.NOT_RECOGNIZED; - } - - public String getDefaultNamespace(final XmlDocumentInfo documentInfo) - { - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule.java deleted file mode 100644 index 9258a452bf12..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.office.DocumentContentReadHandler; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; -import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -public class StarXmlFactoryModule implements XmlFactoryModule -{ - - public StarXmlFactoryModule() - { - } - - public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) - { - return new DocumentContentReadHandler(); - } - - public int getDocumentSupport(final XmlDocumentInfo documentInfo) - { - final String rootNamespace = documentInfo.getRootElementNameSpace(); - if (OfficeNamespaces.OFFICE_NS.equals(rootNamespace) && ("document-content".equals(documentInfo.getRootElement()) || "document".equals(documentInfo.getRootElement()))) - { - return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; - } - return XmlFactoryModule.NOT_RECOGNIZED; - } - - public String getDefaultNamespace(final XmlDocumentInfo documentInfo) - { - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper.java deleted file mode 100644 index 32ae65c02040..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser; - -import org.jfree.layouting.input.style.CSSDeclarationRule; - -public interface StyleMapper -{ - - void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule); -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler.java deleted file mode 100644 index 0afb8c107c82..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.chart; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.rpt.DetailRootTableReadHandler; -import com.sun.star.report.pentaho.parser.rpt.ReportReadHandler; -import com.sun.star.report.pentaho.parser.text.TextContentReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -public class ChartReadHandler extends ElementReadHandler -{ - - private final Section element; - private final List children; - private final ReportReadHandler reportHandler; - - public ChartReadHandler(ReportReadHandler reportHandler) - { - this.reportHandler = reportHandler; - children = new ArrayList(); - element = new Section(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if ("detail".equals(tagName)) - { - final DetailRootTableReadHandler detail = new DetailRootTableReadHandler(); - reportHandler.setDetail(detail); - return detail; - } - else if ("p".equals(tagName) && OfficeNamespaces.TEXT_NS.equals(uri)) - { - final TextContentReadHandler readHandler = new TextContentReadHandler(); - children.add(readHandler); - return readHandler; - } - final ChartReadHandler erh = new ChartReadHandler(reportHandler); - children.add(erh); - return erh; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (ElementReadHandler handler : children) - { - element.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler.java deleted file mode 100644 index 40aee6391296..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.data; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.DataStyle; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.StaticText; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -public class DataStyleReadHandler extends ElementReadHandler -{ - - private final DataStyle dataStyle; - private final List children; - private final boolean hasCData; - - public DataStyleReadHandler(final boolean hasCData) - { - this.hasCData = hasCData; - this.dataStyle = new DataStyle(); - this.children = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.DATASTYLE_NS.equals(uri) || OfficeNamespaces.STYLE_NS.equals(uri)) - { - final DataStyleReadHandler xrh = new DataStyleReadHandler("text".equals(tagName) || "currency-symbol".equals(tagName) || "embedded-text".equals(tagName)); - children.add(xrh); - return xrh; - } - - return null; - } - - /** - * This method is called to process the character data between element tags. - * - * @param ch the character buffer. - * @param start the start index. - * @param length the length. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - public void characters(final char[] ch, final int start, final int length) - throws SAXException - { - if (hasCData) - { - children.add(new StaticText(new String(ch, start, length))); - } - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final Object o = children.get(i); - if (o instanceof ElementReadHandler) - { - final ElementReadHandler handler = (ElementReadHandler) o; - dataStyle.addNode(handler.getElement()); - } - else if (o instanceof StaticText) - { - dataStyle.addNode((StaticText) o); - } - } - } - - public DataStyle getDataStyle() - { - return dataStyle; - } - - public Element getElement() - { - return dataStyle; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler.java deleted file mode 100644 index 25601dee934f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.draw; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ObjectOleElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * - */ -public class ObjectOleReadHandler extends ElementReadHandler -{ - - private final static String RPT_CHART_CLASS_ID = "80243D39-6741-46C5-926E-069164FF87BB"; - private final static String OOO_CHART_CLASS_ID = "12DCAE26-281F-416F-A234-C3086127382E"; - private final ObjectOleElement element; - - public ObjectOleReadHandler(final ObjectOleElement element) - { - this.element = element; - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - - final String url = attrs.getValue(OfficeNamespaces.XLINK_NS, "href"); - if (url != null) - { - element.setUrl(url); - } - - String classid = attrs.getValue(OfficeNamespaces.DRAWING_NS, "class-id"); - if (classid != null) - { - if (classid.equalsIgnoreCase(RPT_CHART_CLASS_ID)) - { - classid = OOO_CHART_CLASS_ID; - } - element.setClassId(classid); - } - } - - public Element getElement() - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler.java deleted file mode 100644 index 669d1a8fdf62..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.office; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.rpt.ReportReadHandler; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class BodyReadHandler extends ElementReadHandler -{ - - private ElementReadHandler reportReadHandler; - private final Section body; - - public BodyReadHandler() - { - body = new Section(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OFFICE_NS.equals(uri) && "report".equals(tagName)) - { - reportReadHandler = new ReportReadHandler(); - return reportReadHandler; - } - - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - if (reportReadHandler != null) - { - body.addNode(reportReadHandler.getElement()); - } - } - - public Element getElement() - { - return body; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler.java deleted file mode 100644 index 92cc38044963..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.office; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeDocument; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.parser.style.OfficeStylesReadHandler; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.jfree.report.JFreeReport; - -import org.pentaho.reporting.libraries.resourceloader.Resource; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceKey; -import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * This is the root handler for the document context. The - * 'office:document-context' element is encountered, if the document is split - * into separate files. - *

- * Alternativly, there is the option to keep everything in one file. The root - * element for that format is 'office:document'. - */ -public class DocumentContentReadHandler extends AbstractXmlReadHandler -{ - - private static final Log LOGGER = LogFactory.getLog(DocumentContentReadHandler.class); - private OfficeDocument report; - private FontFaceDeclsReadHandler fontFaceReadHandler; - private BodyReadHandler bodyReadHandler; - private OfficeStylesCollection officeStylesCollection; - - public DocumentContentReadHandler() - { - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) - throws SAXException - { - super.startParsing(attrs); - // parse the external 'styles.xml' if it exists - // parse the external 'meta.xml' if it exists - // parse the external 'settings.xml' if it exists - this.report = parseContentXml(); - this.report.setVirtual(true); - this.report.setType("document-content"); - this.report.setNamespace(OfficeNamespaces.OFFICE_NS); - this.report.setVirtual(true); - this.officeStylesCollection = parseStylesXml(); - } - - private OfficeStylesCollection parseStylesXml() - { - final ResourceKey contextKey = getRootHandler().getContext(); - final ResourceManager resourceManager = getRootHandler().getResourceManager(); - - try - { - final ResourceKey key = - resourceManager.deriveKey(contextKey, "styles.xml"); - final Resource resource = - resourceManager.create(key, contextKey, OfficeStylesCollection.class); - final OfficeStylesCollection styles = - (OfficeStylesCollection) resource.getResource(); - if (styles != null) - { - return styles; - } - } - catch (ResourceKeyCreationException e) - { - // ignore .. - LOGGER.debug("Failed to create resource-key for 'styles.xml'. Ignoring.", e); - } - catch (ResourceException e) - { - // ignore .. - LOGGER.debug("Failed to parse resource for 'styles.xml'. Ignoring.", e); - } - - return new OfficeStylesCollection(); - } - - private OfficeDocument parseContentXml() - { - // Check whether this is a content.xml. - if (!OfficeNamespaces.OFFICE_NS.equals(getUri()) || "document-content".equals(getTagName())) - { - return new OfficeDocument(); - } - - // we may have to parse an existing content.xml. - final ResourceKey contextKey = getRootHandler().getContext(); - final ResourceManager resourceManager = getRootHandler().getResourceManager(); - try - { - final ResourceKey key = - resourceManager.deriveKey(contextKey, "content.xml"); - final Resource resource = - resourceManager.create(key, contextKey, JFreeReport.class); - final OfficeDocument doc = (OfficeDocument) resource.getResource(); - if (doc != null) - { - return doc; - } - } - catch (ResourceKeyCreationException e) - { - // ignore .. - LOGGER.debug("Failed to create resource-key for 'content.xml'. Ignoring."); - } - catch (ResourceException e) - { - // ignore .. - LOGGER.debug("Failed to parse resource for 'content.xml'. Ignoring."); - } - return new OfficeDocument(); - - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OFFICE_NS.equals(uri)) - { - if ("font-face-decls".equals(tagName)) - { - if (fontFaceReadHandler == null) - { - fontFaceReadHandler = new FontFaceDeclsReadHandler(officeStylesCollection.getFontFaceDecls()); - } - return fontFaceReadHandler; - } - else if ("automatic-styles".equals(tagName)) - { - return new OfficeStylesReadHandler(officeStylesCollection.getAutomaticStyles()); - } - else if ("styles".equals(tagName)) - { - return new OfficeStylesReadHandler(officeStylesCollection.getCommonStyles()); - } - else if ("master-styles".equals(tagName)) - { - return new MasterStylesReadHandler(officeStylesCollection.getMasterStyles()); - } - else if ("body".equals(tagName)) - { - bodyReadHandler = new BodyReadHandler(); - return bodyReadHandler; - } - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - // The office-document is the only node of the report. It allows us to - // switch the layout-processing implementation later on. - - report.setStylesCollection(officeStylesCollection); - - if (bodyReadHandler != null) - { - report.addNode(bodyReadHandler.getElement()); - } - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() - throws SAXException - { - return report; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler.java deleted file mode 100644 index 799875991d36..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.office; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeStylesCollection; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.style.OfficeStylesReadHandler; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * The root parser for a 'styles.xml' document. This generates the global - * (or common) style collection. These styles contain the named common styles - * and the page layouts. - * - * @since 08.03.2007 - */ -public class DocumentStylesReadHandler extends ElementReadHandler -{ - - private final OfficeStylesCollection officeStylesCollection; - private FontFaceDeclsReadHandler fontFaceReadHandler; - - public DocumentStylesReadHandler() - { - officeStylesCollection = new OfficeStylesCollection(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (!OfficeNamespaces.OFFICE_NS.equals(uri)) - { - return null; - } - - if ("font-face-decls".equals(tagName)) - { - if (fontFaceReadHandler == null) - { - fontFaceReadHandler = new FontFaceDeclsReadHandler(officeStylesCollection.getFontFaceDecls()); - } - return fontFaceReadHandler; - } - else if ("automatic-styles".equals(tagName)) - { - return new OfficeStylesReadHandler(officeStylesCollection.getAutomaticStyles()); - } - else if ("styles".equals(tagName)) - { - return new OfficeStylesReadHandler(officeStylesCollection.getCommonStyles()); - } - else if ("master-styles".equals(tagName)) - { - return new MasterStylesReadHandler(officeStylesCollection.getMasterStyles()); - } - return null; - } - - public Element getElement() - { - return officeStylesCollection; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler.java deleted file mode 100644 index bf1025893cd2..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.office; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FontFaceDeclsSection; -import com.sun.star.report.pentaho.model.FontFaceElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.style.FontFaceReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Reads the font-face declarations section. This one can only contain - * font-face elements. - * - * @since 13.03.2007 - */ -public class FontFaceDeclsReadHandler extends ElementReadHandler -{ - - private final FontFaceDeclsSection fontFaceDecls; - private final List fontFaceReadHandlers; - - public FontFaceDeclsReadHandler(final FontFaceDeclsSection fontFaceDecls) - { - this.fontFaceDecls = fontFaceDecls; - this.fontFaceReadHandlers = new ArrayList(); - } - - public FontFaceDeclsSection getFontFaceDecls() - { - return fontFaceDecls; - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (!OfficeNamespaces.STYLE_NS.equals(uri)) - { - return null; - } - - if ("font-face".equals(tagName)) - { - final FontFaceReadHandler frh = new FontFaceReadHandler(); - fontFaceReadHandlers.add(frh); - return frh; - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - for (int i = 0; i < fontFaceReadHandlers.size(); i++) - { - final FontFaceReadHandler handler = fontFaceReadHandlers.get(i); - fontFaceDecls.addFontFace((FontFaceElement) handler.getElement()); - } - } - - public Element getElement() - { - return fontFaceDecls; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler.java deleted file mode 100644 index 4d682ecad419..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.office; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeMasterStyles; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.style.MasterPageReadHandler; -import com.sun.star.report.pentaho.parser.style.StyleDefinitionReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Todo: Document me! - * - * @since 13.03.2007 - */ -public class MasterStylesReadHandler extends ElementReadHandler -{ - - private final OfficeMasterStyles masterStyles; - private final List otherHandlers; - private final List masterPageHandlers; - - public MasterStylesReadHandler(final OfficeMasterStyles masterStyles) - { - this.masterStyles = masterStyles; - this.masterPageHandlers = new ArrayList(); - this.otherHandlers = new ArrayList(); - } - - public OfficeMasterStyles getMasterStyles() - { - return masterStyles; - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.STYLE_NS.equals(uri) && "master-page".equals(tagName)) - { - final MasterPageReadHandler mrh = new MasterPageReadHandler(); - masterPageHandlers.add(mrh); - return mrh; - } - - final StyleDefinitionReadHandler readHandler = - new StyleDefinitionReadHandler(); - otherHandlers.add(readHandler); - return readHandler; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - for (int i = 0; i < otherHandlers.size(); i++) - { - final ElementReadHandler handler = otherHandlers.get(i); - masterStyles.getOtherNodes().addNode(handler.getElement()); - } - - for (int i = 0; i < masterPageHandlers.size(); i++) - { - final MasterPageReadHandler handler = masterPageHandlers.get(i); - masterStyles.addMasterPage(handler.getMasterPage()); - } - } - - public Element getElement() - { - return masterStyles; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd deleted file mode 100644 index 4c296ac7a75f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java deleted file mode 100644 index 6a449497d80d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.expressions.FormulaFunction; -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Handles the 'report:conditional-print-expression' element that can appear - * in all report elements and all root-level sections. - * - * @since 02.03.2007 - */ -public class ConditionalPrintExpressionReadHandler - extends AbstractXmlReadHandler -{ - - private final Element element; - - public ConditionalPrintExpressionReadHandler(final Element element) - { - this.element = element; - } - - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); - if (formula != null) - { - final FormulaFunction valueExpression = new FormulaFunction(); - valueExpression.setFormula(formula); - element.setDisplayCondition(valueExpression); - } - - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() - throws SAXException - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler.java deleted file mode 100644 index 9a0975e64c7c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.model.OfficeDetailSection; - -public class DetailRootTableReadHandler extends RootTableReadHandler -{ - - public DetailRootTableReadHandler() - { - super(new OfficeDetailSection()); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler.java deleted file mode 100644 index 984820a59cd6..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FixedTextElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.text.TextContentReadHandler; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Creation-Date: 01.10.2006, 18:48:11 - * - */ -public class FixedContentReadHandler extends ElementReadHandler -{ - - private final FixedTextElement element; - - public FixedContentReadHandler() - { - element = new FixedTextElement(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.TEXT_NS.equals(uri) && OfficeToken.P.equals(tagName)) - { - // expect a paragraph (which will be ignored; it is a structural - // component that needs not to be printed at all. - return new TextContentReadHandler(element.getContent()); - } - - if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - // expect a report control. The control will modifiy the current - // element (as we do not separate the elements that strictly ..) - if ("report-control".equals(tagName)) - { - return new IgnoreAnyChildReadHandler(); - } - if ("report-element".equals(tagName)) - { - return new ReportElementReadHandler(element); - } - } - return null; - } - - public Element getElement() - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler.java deleted file mode 100644 index 05d49eeb5a28..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormatCondition; -import com.sun.star.report.pentaho.model.ReportElement; - -import org.jfree.report.expressions.FormulaExpression; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.ParseException; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * I'm quite sure I should parse something here. But what? - * - */ -public class FormatConditionReadHandler extends AbstractXmlReadHandler -{ - - private final ReportElement element; - - public FormatConditionReadHandler(final ReportElement element) - { - if (element == null) - { - throw new NullPointerException(); - } - this.element = element; - } - - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - - - final String formula = - attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); - if (formula == null) - { - throw new ParseException("Required attribute 'formula' is missing.", getLocator()); - } - final String stylename = - attrs.getValue(OfficeNamespaces.OOREPORT_NS, OfficeToken.STYLE_NAME); - if (stylename == null) - { - throw new ParseException("Required attribute 'style-name' is missing.", getLocator()); - } - final FormulaExpression valueExpression = new FormulaExpression(); - valueExpression.setFormula(formula); - - final String enabledText = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "enabled"); - final boolean enabled = (enabledText == null || OfficeToken.TRUE.equals(enabledText)); - final FormatCondition formatCondition = - new FormatCondition(valueExpression, stylename, enabled); - element.addFormatCondition(formatCondition); - - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() - throws SAXException - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler.java deleted file mode 100644 index 0ed48ca586d9..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.FormattedTextElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Creation-Date: 01.10.2006, 19:06:45 - * - */ -public class FormattedTextReadHandler extends ElementReadHandler -{ - - private final FormattedTextElement element; - - public FormattedTextReadHandler() - { - element = new FormattedTextElement(); - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - - final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); - if (formula != null) - { - final FormulaExpression valueExpression = new FormulaExpression(); - valueExpression.setFormula(formula); - element.setValueExpression(valueExpression); - } - - // * Print-Repeated-Values - // * Print-In-First-New-Section - // * Print-When-Group-Change - - // * Print-When-Section-Overflows - // That property cannot be evaluated yet, as this would require us to - // have a clue about pagebreaking. We dont have that - not yet and never - // in the future, as pagebreaks are computed by OpenOffice instead - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - // expect a report control. The control will modifiy the current - // element (as we do not separate the elements that strictly ..) - if ("report-control".equals(tagName)) - { - return new IgnoreAnyChildReadHandler(); - } - if ("report-element".equals(tagName)) - { - return new ReportElementReadHandler(element); - } - } - return null; - } - - public Element getElement() - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler.java deleted file mode 100644 index 63c519ebce60..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.jfree.report.expressions.Expression; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.expressions.FormulaFunction; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.ParseException; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Parses a named expression. These expressions are encountered on reports and - * groups and compute global values. Expressions must have an unique name. - * - */ -public class FunctionReadHandler extends AbstractXmlReadHandler -{ - - private Expression expression; - - public FunctionReadHandler() - { - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) - throws SAXException - { - final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); - if (formula == null) - { - throw new ParseException("Required attribute 'formula' is missing", getLocator()); - } - - final String name = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "name"); - if (name == null) - { - throw new ParseException("Required attribute 'name' is missing", getLocator()); - } - final String initialFormula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "initial-formula"); - final String deepTraversing = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "deep-traversing"); - - if (initialFormula != null) - { - final FormulaFunction function = new FormulaFunction(); - function.setInitial(initialFormula); - function.setFormula(formula); - this.expression = function; - } - else - { - final FormulaExpression expression = new FormulaExpression(); - expression.setFormula(formula); - this.expression = expression; - } - - expression.setName(name); - expression.setDeepTraversing(OfficeToken.TRUE.equals(deepTraversing)); - final String preEvaluated = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "pre-evaluated"); - expression.setPrecompute(OfficeToken.TRUE.equals(preEvaluated)); - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() - throws SAXException - { - return getExpression(); - } - - public Expression getExpression() - { - return expression; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler.java deleted file mode 100644 index 61ce6bb16649..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeGroup; -import com.sun.star.report.pentaho.model.OfficeGroupInstanceSection; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -public class GroupReadHandler extends ElementReadHandler -{ - - private GroupSectionReadHandler groupHeader; - private GroupSectionReadHandler groupFooter; - private GroupReadHandler childGroup; - private RootTableReadHandler detailSection; - private final OfficeGroup group; - private final OfficeGroupInstanceSection groupInstanceSection; - private final List functionHandlers; - private final ReportReadHandler rh; - - public GroupReadHandler(final ReportReadHandler _rh) - { - rh = _rh; - group = new OfficeGroup(); - groupInstanceSection = new OfficeGroupInstanceSection(); - groupInstanceSection.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - groupInstanceSection.setType("group-instance"); - group.addNode(groupInstanceSection); - functionHandlers = new ArrayList(); - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - - final String groupExpr = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "group-expression"); - if (groupExpr != null && !"".equals(groupExpr)) - { - final FormulaExpression function = new FormulaExpression(); - function.setFormula(groupExpr); - groupInstanceSection.setGroupingExpression(function); - } - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (!OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - return null; - } - if ("function".equals(tagName)) - { - final FunctionReadHandler erh = new FunctionReadHandler(); - functionHandlers.add(erh); - return erh; - } - if ("group-header".equals(tagName)) - { - groupHeader = new GroupSectionReadHandler(); - return groupHeader; - } - if ("group".equals(tagName)) - { - childGroup = new GroupReadHandler(rh); - return childGroup; - } - if ("detail".equals(tagName)) - { - detailSection = new DetailRootTableReadHandler(); - rh.setDetail(detailSection); - return detailSection; - } - if ("group-footer".equals(tagName)) - { - ((Element) ((Section) rh.getDetail().getElement()).getNode(0)).setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "has-group-footer", OfficeToken.TRUE); - groupFooter = new GroupSectionReadHandler(); - return groupFooter; - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < functionHandlers.size(); i++) - { - final FunctionReadHandler handler = functionHandlers.get(i); - groupInstanceSection.addExpression(handler.getExpression()); - } - - if (groupHeader != null) - { - groupInstanceSection.addNode(groupHeader.getElement()); - } - - final Section groupBody = new Section(); - groupBody.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - groupBody.setType("group-body"); - groupInstanceSection.addNode(groupBody); - // XOR: Either the detail or the group section can be set .. - if (detailSection != null) - { - groupBody.addNode(detailSection.getElement()); - } - else if (childGroup != null) - { - groupBody.addNode(childGroup.getElement()); - } - - if (groupFooter != null) - { - groupInstanceSection.addNode(groupFooter.getElement()); - } - } - - public Element getElement() - { - return group; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler.java deleted file mode 100644 index c345fa174801..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.model.OfficeGroupSection; - -public class GroupSectionReadHandler extends RootTableReadHandler -{ - - public GroupSectionReadHandler() - { - super(new OfficeGroupSection()); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler.java deleted file mode 100644 index d736f127445a..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ImageElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.xlink.XLinkReadHandler; - -import org.jfree.report.expressions.FormulaExpression; -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Deals with Image-content. There are two ways to specify the image; - * as formula or as static image data. - * - */ -public class ImageReadHandler extends ElementReadHandler -{ - - private final ImageElement contentElement; - private XLinkReadHandler xLinkReadHandler; - - public ImageReadHandler() - { - contentElement = new ImageElement(); - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); -// final String preserveIRI = attrs.getValue(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI); - if (formula != null && formula.length() != 0) - { - // now, the evaulated content ends up in the 'content' attribute of the - // element. - final FormulaExpression valueExpression = new FormulaExpression(); - valueExpression.setFormula(formula); - contentElement.setFormula(valueExpression); - } - - contentElement.setNamespace(OfficeNamespaces.FORM_NS); - contentElement.setType(OfficeToken.IMAGE); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.DRAWING_NS.equals(uri) && OfficeToken.IMAGE_DATA.equals(tagName)) - { - xLinkReadHandler = new XLinkReadHandler(); - return xLinkReadHandler; - } - - if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - // expect a report control. The control will modifiy the current - // element (as we do not separate the elements that strictly ..) - if ("report-control".equals(tagName)) - { - return new IgnoreAnyChildReadHandler(); - } - if ("report-element".equals(tagName)) - { - return new ReportElementReadHandler(contentElement); - } - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - // if we have static content (as well or only), that one goes into the - // alternate-content attribute right now. It is part of the output target - // and style rules to deal with them properly .. - if (xLinkReadHandler != null) - { - contentElement.setAttribute(OfficeNamespaces.OOREPORT_NS, - "alternate-content", xLinkReadHandler.getUri()); - } - } - - public Element getElement() - { - return contentElement; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler.java deleted file mode 100644 index 725091778fba..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ObjectOleElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class MasterDetailReadHandler extends ElementReadHandler -{ - - private final ObjectOleElement element; - private final boolean parseMasterDetail; - - public MasterDetailReadHandler(final ObjectOleElement element) - { - this.element = element; - parseMasterDetail = false; - } - - public MasterDetailReadHandler(final ObjectOleElement element, final boolean parseMasterDetail) - { - this.element = element; - this.parseMasterDetail = parseMasterDetail; - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - if (parseMasterDetail) - { - final String master = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "master"); - if (master != null && master.length() > 0) - { - final String detail = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "detail"); - element.addMasterDetailFields(master, detail); - } - } - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "master-detail-field".equals(tagName)) - { - // expect a report control. The control will modifiy the current - // element (as we do not separate the elements that strictly ..) - return new MasterDetailReadHandler(element, true); - } - - return null; - } - - public Element getElement() - { - return element; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler.java deleted file mode 100644 index d7adf8631d9c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ReportElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class ReportElementReadHandler extends ElementReadHandler -{ - - private final ReportElement element; - - public ReportElementReadHandler(final ReportElement element) - { - if (element == null) - { - throw new NullPointerException(); - } - - this.element = element; - } - - public Element getElement() - { - return element; - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) - throws SAXException - { - super.startParsing(attrs); - final String printWhenGroupChange = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "print-when-group-change"); - element.setPrintWhenGroupChange(OfficeToken.TRUE.equals(printWhenGroupChange)); - final String printRepeatingValues = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "print-repeated-values"); - element.setPrintRepeatedValues(printRepeatingValues == null || OfficeToken.TRUE.equals(printRepeatingValues)); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (!OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - return null; - } - if ("conditional-print-expression".equals(tagName)) - { - return new ConditionalPrintExpressionReadHandler(element); - } - if ("format-condition".equals(tagName)) - { - return new FormatConditionReadHandler(element); - } - if ("report-component".equals(tagName)) - { - return new IgnoreAnyChildReadHandler(); - } - return null; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler.java deleted file mode 100644 index 5e7821a13a0a..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeReport; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.chart.ChartReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.JFreeReportInfo; -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -public class ReportReadHandler extends ElementReadHandler -{ - - private RootTableReadHandler pageHeader; - private RootTableReadHandler pageFooter; - private RootTableReadHandler reportHeader; - private RootTableReadHandler reportFooter; - private RootTableReadHandler detail; - private GroupReadHandler groups; - private final OfficeReport rootSection; - private final List functionHandlers; - private final List preBodyHandlers; - private final List postBodyHandlers; - private boolean pre = true; - - public ReportReadHandler() - { - rootSection = new OfficeReport(); - rootSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "simple-report-structure", Boolean.TRUE); - functionHandlers = new ArrayList(); - preBodyHandlers = new ArrayList(); - postBodyHandlers = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - final XmlReadHandler erh; - if (OfficeNamespaces.CHART_NS.equals(uri)) - { - ChartReadHandler crh = new ChartReadHandler(this); - if (pre) - { - preBodyHandlers.add(crh); - } - else - { - postBodyHandlers.add(crh); - } - erh = crh; - } - else if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - if ("function".equals(tagName)) - { - FunctionReadHandler frh = new FunctionReadHandler(); - functionHandlers.add(frh); - erh = frh; - } - else if ("page-header".equals(tagName)) - { - pageHeader = new RootTableReadHandler(); - erh = pageHeader; - } - else if ("report-header".equals(tagName)) - { - reportHeader = new RootTableReadHandler(); - erh = reportHeader; - } - else if ("report-footer".equals(tagName)) - { - reportFooter = new RootTableReadHandler(); - erh = reportFooter; - } - else if ("page-footer".equals(tagName)) - { - pageFooter = new RootTableReadHandler(); - erh = pageFooter; - } - else if ("detail".equals(tagName)) - { - pre = false; - detail = new DetailRootTableReadHandler(); - erh = detail; - } - else if ("group".equals(tagName)) - { - groups = new GroupReadHandler(this); - erh = groups; - } - else - { - erh = null; - } - } - else - { - erh = null; - } - return erh; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - if (pageHeader != null) - { - rootSection.setPageHeader(pageHeader.getElement()); - } - if (pageFooter != null) - { - rootSection.setPageFooter(pageFooter.getElement()); - } - if (reportHeader != null) - { - rootSection.setReportHeader(reportHeader.getElement()); - } - - final Section preBody = createSection("report-pre-body", preBodyHandlers); - if (preBody != null) - { - rootSection.setPreBodySection(preBody); - } - - final Section groupBody = new Section(); - groupBody.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - groupBody.setType("report-body"); - rootSection.setBodySection(groupBody); - - // XOR: Either the detail or the group section can be set .. - if (groups != null) - { - groupBody.addNode(groups.getElement()); - } - else if (detail != null) - { - groupBody.addNode(detail.getElement()); - } - - final Section postBody = createSection("report-post-body", postBodyHandlers); - if (postBody != null) - { - rootSection.setPostBodySection(postBody); - } - - if (reportFooter != null) - { - rootSection.setReportFooter(reportFooter.getElement()); - } - - for (int i = 0; i < functionHandlers.size(); i++) - { - final FunctionReadHandler handler = functionHandlers.get(i); - rootSection.addExpression(handler.getExpression()); - } - } - - public Element getElement() - { - return rootSection; - } - - private final Section createSection(final String name, final List handler) - { - if (!handler.isEmpty()) - { - final Section section = new Section(); - section.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); - section.setType(name); - - for (int i = 0; i < handler.size(); i++) - { - final ElementReadHandler erh = handler.get(i); - section.addNode(erh.getElement()); - } - return section; - } - return null; - } - - public void setDetail(final RootTableReadHandler detail) - { - this.detail = detail; - } - - public final RootTableReadHandler getDetail() - { - return detail; - } - -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler.java deleted file mode 100644 index 32e0d44188d7..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.table.TableReadHandler; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class RootTableReadHandler extends ElementReadHandler -{ - - private TableReadHandler sectionTableReadHandler; - private final Section section; - - public RootTableReadHandler() - { - section = new Section(); - } - - protected RootTableReadHandler(final Section section) - { - if (section == null) - { - throw new NullPointerException(); - } - this.section = section; - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.TABLE_NS.equals(uri) && "table".equals(tagName)) - { - sectionTableReadHandler = new TableReadHandler(); - return sectionTableReadHandler; - } - if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "conditional-print-expression".equals(tagName)) - { - return new ConditionalPrintExpressionReadHandler(section); - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - if (sectionTableReadHandler != null) - { - section.addNode(sectionTableReadHandler.getElement()); - } - } - - public Element getElement() - { - return section; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler.java deleted file mode 100644 index bb206e903a98..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.rpt; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.ObjectOleElement; -import com.sun.star.report.pentaho.parser.draw.ObjectOleReadHandler; -import com.sun.star.report.pentaho.parser.text.NoCDATATextContentReadHandler; - -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class SubDocumentReadHandler extends NoCDATATextContentReadHandler -{ - - private final ObjectOleElement element; - private boolean ignore = false; - - public SubDocumentReadHandler(final ObjectOleElement element) - { - this.element = element; - } - - public SubDocumentReadHandler(final Section section, final ObjectOleElement element) - { - super(section); - this.element = element; - } - - public SubDocumentReadHandler(final Section section) - { - this(section, new ObjectOleElement()); - ignore = true; - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - if (!ignore) - { - super.startParsing(attrs); - } - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - // expect a report control. The control will modifiy the current - // element (as we do not separate the elements that strictly ..) - if ("report-control".equals(tagName)) - { - return new IgnoreAnyChildReadHandler(); - } - if ("report-element".equals(tagName)) - { - return new ReportElementReadHandler(element); - } - if ("master-detail-fields".equals(tagName)) - { - return new MasterDetailReadHandler(element); - } - } - if (OfficeNamespaces.DRAWING_NS.equals(uri)) - { - final XmlReadHandler readHandler; - if (OfficeToken.OBJECT_OLE.equals(tagName)) - { - readHandler = new ObjectOleReadHandler(element); - } - else if ("frame".equals(tagName)) - { - readHandler = new SubDocumentReadHandler(new Section(), element); - } - else - { - readHandler = null; - } - if (readHandler != null) - { - getChildren().add(readHandler); - return readHandler; - } - } - return super.getHandlerForChild(uri, tagName, atts); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties b/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties deleted file mode 100644 index b0bc07516541..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties +++ /dev/null @@ -1,104 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# x-no-translate - -# -# -# -# -# gets translated into: -# -# *[draw|style-name~="S1"] - -namespaces.draw=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 -namespaces.fo=urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0 -namespaces.style=urn:oasis:names:tc:opendocument:xmlns:style:1.0 -namespaces.table=urn:oasis:names:tc:opendocument:xmlns:table:1.0 -namespaces.chart=urn:oasis:names:tc:opendocument:xmlns:chart:1.0 -namespaces.rpt=http://openoffice.org/2005/report - -# -# maps the style family type (graphics) into a style rule of the -# common form: *[|~=""] -# -style-family.graphic=draw -style-family.graphics=draw -style-family.control=control -style-family.report-element=rpt -style-family.table-column=table -style-family.table-row=table -style-family.table-cell=table -style-family.table=table - -# Builds the selector pattern for a star-office stylesheet -# -# 0: Namespace prefix -# 1: Style-class attribute name (from the global namespace definition) -# 2: Style-class value -style-selector.pattern=*[{0}|{1}~="{2}"] - -# -# The following properties map the OpenOffice-generic font names -# into their CSS counterparts. As I dont have a clue, whats the difference -# between modern and swiss typeface, I am ignorant for now and ignore -# them. Blame me for that :) -font-family.roman=serif -font-family.swiss=sans-serif -font-family.modern=sans-serif -font-family.decorative=fantasy -font-family.script=cursive -font-family.system=monospace - - -# -# Defines the style property mapping for the resolve process from the -# OpenOffice report format into the internal LibLayout format -# -# attr.style...= -# -# Group is an selector, which corresponds to one of the sub-elements of -# the style element of the OpenDocument format. (It must match the element -# name for which the attributes are defined.) -# -# Namespace is a defined namespace prefix from this file as defined in the -# namespaces. section above -# -# AttrName is the defined attribute name for this namespace as defined by the -# opendocument standard. -attr.style.graphic-properties.draw.textarea-vertical-align=com.sun.star.report.pentaho.parser.stylemapper.draw.TextAreaVerticalAlignMapper -attr.style.section-properties.fo.background-color=com.sun.star.report.pentaho.parser.stylemapper.fo.BackgroundColorMapper -attr.style.paragraph-properties.fo.text-align=com.sun.star.report.pentaho.parser.stylemapper.fo.TextAlignMapper -attr.style.paragraph-properties.style.vertical-align=com.sun.star.report.pentaho.parser.stylemapper.style.VerticalAlignMapper -attr.style.text-properties.fo.color=com.sun.star.report.pentaho.parser.stylemapper.fo.ColorMapper -attr.style.text-properties.style.font-name=com.sun.star.report.pentaho.parser.stylemapper.style.FontNameMapper -attr.style.text-properties.fo.font-family=com.sun.star.report.pentaho.parser.stylemapper.style.FontFamilyMapper -attr.style.table-properties.fo.background-color=com.sun.star.report.pentaho.parser.stylemapper.fo.BackgroundColorMapper -#attr.style.text-properties.style.font-style-name= -attr.style.text-properties.style.font-family-generic=com.sun.star.report.pentaho.parser.stylemapper.style.FontFamilyGenericMapper -attr.style.text-properties.style.font-pitch=com.sun.star.report.pentaho.parser.stylemapper.style.FontPitchMapper -attr.style.text-properties.fo.font-size=com.sun.star.report.pentaho.parser.stylemapper.fo.FontSizeMapper -attr.style.text-properties.fo.font-style=com.sun.star.report.pentaho.parser.stylemapper.fo.FontStyleMapper -attr.style.text-properties.style.text-underline-style=com.sun.star.report.pentaho.parser.stylemapper.style.TextUnderlineStyleMapper -attr.style.text-properties.style.text-underline-width=com.sun.star.report.pentaho.parser.stylemapper.style.TextUnderlineWidthMapper -attr.style.text-properties.style.text-underline-color=com.sun.star.report.pentaho.parser.stylemapper.style.TextUnderlineColorMapper -attr.style.text-properties.fo.font-weight=com.sun.star.report.pentaho.parser.stylemapper.fo.FontWeightMapper -attr.style.text-properties.style.text-emphasize=com.sun.star.report.pentaho.parser.stylemapper.style.TextEmphasizeMapper -attr.style.text-properties.style.font-relief=com.sun.star.report.pentaho.parser.stylemapper.style.FontReliefMapper -attr.style.table-column-properties.table.column-width=com.sun.star.report.pentaho.parser.stylemapper.table.ColumnWidthMapper -attr.style.table-row-properties.table.row-height=com.sun.star.report.pentaho.parser.stylemapper.table.RowHeightMapper -attr.style.table-cell-properties.fo.border-right=com.sun.star.report.pentaho.parser.stylemapper.fo.BorderRightMapper diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt b/reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt deleted file mode 100644 index 6b1ede5d98cf..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt +++ /dev/null @@ -1,8 +0,0 @@ - - - - -gets translated into: - -*[draw|style-name~="S1"] - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler.java deleted file mode 100644 index 00b230311f84..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.model.FontFaceElement; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; - -/** - * Reads a single font-face declaration. This is equal to the @font rule of - * the CSS standard. We do not interpret the attributes of the element in - * any way yet. - * - * @since 13.03.2007 - */ -public class FontFaceReadHandler extends ElementReadHandler -{ - - private final FontFaceElement fontFaceElement; - - public FontFaceReadHandler() - { - this.fontFaceElement = new FontFaceElement(); - } - - public Element getElement() - { - return fontFaceElement; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler.java deleted file mode 100644 index 5a6d74f3d536..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.model.OfficeMasterPage; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Todo: Document me! - * - * @since 13.03.2007 - */ -public class MasterPageReadHandler extends ElementReadHandler -{ - - private final OfficeMasterPage masterPage; - private final List otherHandlers; - - public MasterPageReadHandler() - { - masterPage = new OfficeMasterPage(); - this.otherHandlers = new ArrayList(); - } - - public OfficeMasterPage getMasterPage() - { - return masterPage; - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - final StyleDefinitionReadHandler readHandler = - new StyleDefinitionReadHandler(); - otherHandlers.add(readHandler); - return readHandler; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - for (int i = 0; i < otherHandlers.size(); i++) - { - final ElementReadHandler handler = otherHandlers.get(i); - masterPage.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return masterPage; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler.java deleted file mode 100644 index cbfcc112f8ea..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.model.OfficeStyle; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * This class reads a single style rule. The resulting 'office-style' element - * is added to an 'office-styles' set. - */ -public class OfficeStyleReadHandler extends ElementReadHandler -{ - - private final OfficeStyle officeStyle; - private final List children; - - public OfficeStyleReadHandler() - { - this.officeStyle = new OfficeStyle(); - this.children = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { -// if (OfficeParserUtil.getInstance().isValidStyleElement(uri, tagName)) -// { -// } - final StyleDefinitionReadHandler readHandler = - new StyleDefinitionReadHandler(); - children.add(readHandler); - return readHandler; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final ElementReadHandler handler = children.get(i); - officeStyle.addNode(handler.getElement()); - } - } - - public OfficeStyle getOfficeStyle() - { - return officeStyle; - } - - public Element getElement() - { - return officeStyle; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler.java deleted file mode 100644 index 37a3e8cccc1b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeStyles; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.data.DataStyleReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.modules.factories.report.flow.SectionReadHandler; -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -public class OfficeStylesReadHandler extends ElementReadHandler -{ - - private final List textStyleChildren; - private final List dataStyleChildren; - private final List otherStyleChildren; - private final List pageLayoutChildren; - private final OfficeStyles officeStyles; - - public OfficeStylesReadHandler(final OfficeStyles officeStyles) - { - this.officeStyles = officeStyles; - this.pageLayoutChildren = new ArrayList(); - this.dataStyleChildren = new ArrayList(); - this.textStyleChildren = new ArrayList(); - this.otherStyleChildren = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.STYLE_NS.equals(uri)) - { - if ("style".equals(tagName)) - { - final OfficeStyleReadHandler xrh = new OfficeStyleReadHandler(); - textStyleChildren.add(xrh); - return xrh; - } - else if ("page-layout".equals(tagName)) - { - final PageLayoutReadHandler prh = new PageLayoutReadHandler(); - pageLayoutChildren.add(prh); - return prh; - } - } - else if (OfficeNamespaces.DATASTYLE_NS.equals(uri)) - { - final DataStyleReadHandler xrh = new DataStyleReadHandler(false); - dataStyleChildren.add(xrh); - return xrh; - } - - final SectionReadHandler genericReadHander = new SectionReadHandler(); - otherStyleChildren.add(genericReadHander); - return genericReadHander; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < textStyleChildren.size(); i++) - { - final OfficeStyleReadHandler handler = textStyleChildren.get(i); - officeStyles.addStyle(handler.getOfficeStyle()); - } - - for (int i = 0; i < pageLayoutChildren.size(); i++) - { - final PageLayoutReadHandler handler = pageLayoutChildren.get(i); - officeStyles.addPageStyle(handler.getPageLayout()); - } - - for (int i = 0; i < dataStyleChildren.size(); i++) - { - final DataStyleReadHandler handler = dataStyleChildren.get(i); - officeStyles.addDataStyle(handler.getDataStyle()); - } - - for (int i = 0; i < otherStyleChildren.size(); i++) - { - final SectionReadHandler handler = otherStyleChildren.get(i); - officeStyles.addOtherNode((Element) handler.getNode()); - } - } - - public Element getElement() - { - return officeStyles; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler.java deleted file mode 100644 index 95109164ae3d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.model.PageLayout; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Reads a page-layout element. - * - * @since 13.03.2007 - */ -public class PageLayoutReadHandler extends ElementReadHandler -{ - - private final PageLayout pageLayout; - private final List children; - - public PageLayoutReadHandler() - { - this.pageLayout = new PageLayout(); - this.children = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - final StyleDefinitionReadHandler readHandler = - new StyleDefinitionReadHandler(); - children.add(readHandler); - return readHandler; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final ElementReadHandler handler = children.get(i); - pageLayout.addNode(handler.getElement()); - } - } - - public PageLayout getPageLayout() - { - return pageLayout; - } - - public Element getElement() - { - return pageLayout; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler.java deleted file mode 100644 index 2961068908af..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.style; - -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Reads all children of a style-definition. This simply copies everything that - * is contained in the source-file into a generic structure that can be - * written out later. - */ -public class StyleDefinitionReadHandler extends ElementReadHandler -{ - - private final Section rawSection; - private final List children; - - public StyleDefinitionReadHandler() - { - this.rawSection = new Section(); - this.children = new ArrayList(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - final StyleDefinitionReadHandler readHandler = - new StyleDefinitionReadHandler(); - children.add(readHandler); - return readHandler; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final ElementReadHandler handler = children.get(i); - rawSection.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return rawSection; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java deleted file mode 100644 index e2c292bdf38d..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import java.util.HashMap; -import java.util.Map; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.StyleKey; -import org.jfree.layouting.input.style.values.CSSValue; - - -public abstract class OneOfConstantsMapper implements StyleMapper -{ - - private final StyleKey styleKey; - private final Map mappings; - - protected OneOfConstantsMapper(final StyleKey styleKey) - { - this.styleKey = styleKey; - this.mappings = new HashMap(); - } - - public void addMapping(final String value, final CSSValue target) - { - mappings.put(value, target); - } - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSValue value = lookupMapping(attrValue); - if (value != null) - { - targetRule.setPropertyValue(styleKey, value); - } - } - - public StyleKey getStyleKey() - { - return styleKey; - } - - protected CSSValue lookupMapping(final String attrValue) - { - return mappings.get(attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java deleted file mode 100644 index da80173092ba..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.draw; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; -import org.jfree.layouting.input.style.values.CSSConstant; - -public class TextAreaVerticalAlignMapper extends OneOfConstantsMapper -{ - - public TextAreaVerticalAlignMapper() - { - super(BoxStyleKeys.BOX_VERTICAL_ALIGN); - addMapping("top", new CSSConstant("top")); - addMapping("bottom", new CSSConstant("bottom")); - addMapping("middle", new CSSConstant("middle")); - addMapping("justify", new CSSConstant("justify")); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java deleted file mode 100644 index d8c054edf52e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.border.BorderStyleKeys; -import org.jfree.layouting.input.style.values.CSSColorValue; -import org.jfree.layouting.util.ColorUtil; - -public class BackgroundColorMapper implements StyleMapper -{ - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); - if (cv != null) - { - targetRule.setPropertyValue(BorderStyleKeys.BACKGROUND_COLOR, cv); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java deleted file mode 100644 index af9afa4ab270..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; - -public class BorderRightMapper implements StyleMapper -{ - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(attrName, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper.java deleted file mode 100644 index 870674198c1e..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.color.ColorStyleKeys; -import org.jfree.layouting.input.style.values.CSSColorValue; -import org.jfree.layouting.util.ColorUtil; - -public class ColorMapper implements StyleMapper -{ - - public ColorMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); - if (cv != null) - { - targetRule.setPropertyValue(ColorStyleKeys.COLOR, cv); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java deleted file mode 100644 index 21c9452b8715..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; - -public class FontSizeMapper implements StyleMapper -{ - - public FontSizeMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(FontStyleKeys.FONT_SIZE, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java deleted file mode 100644 index 07f9254e22d8..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; - -public class FontStyleMapper implements StyleMapper -{ - - public FontStyleMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(FontStyleKeys.FONT_STYLE, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java deleted file mode 100644 index 667715584e24..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; - -public class FontWeightMapper implements StyleMapper -{ - - public FontWeightMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(FontStyleKeys.FONT_WEIGHT, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java deleted file mode 100644 index 221041a02b12..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.fo; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.text.TextAlign; -import org.jfree.layouting.input.style.keys.text.TextStyleKeys; - -public class TextAlignMapper extends OneOfConstantsMapper -{ - - public TextAlignMapper() - { - super(TextStyleKeys.TEXT_ALIGN); - addMapping("start", TextAlign.START); - addMapping("end", TextAlign.END); - addMapping("left", TextAlign.LEFT); - addMapping("center", TextAlign.CENTER); - addMapping("right", TextAlign.RIGHT); - addMapping("justify", TextAlign.JUSTIFY); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java deleted file mode 100644 index f41a786a58fa..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; -import org.jfree.layouting.input.style.values.CSSStringType; -import org.jfree.layouting.input.style.values.CSSStringValue; -import org.jfree.layouting.input.style.values.CSSValue; -import org.jfree.layouting.input.style.values.CSSValueList; - -public class FontFamilyGenericMapper implements StyleMapper -{ - - public FontFamilyGenericMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSValue value = targetRule.getPropertyCSSValue(FontStyleKeys.FONT_FAMILY); - if (!(value instanceof CSSValueList)) - { - final CSSStringValue cssVal = new CSSStringValue(CSSStringType.STRING, attrValue); - targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, - new CSSValueList(new CSSValue[] - { - cssVal - })); - } - else - { - final CSSValueList list = (CSSValueList) value; - targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, - CSSValueList.insertLast(list, value)); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java deleted file mode 100644 index 45ca730c9afb..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; -import org.jfree.layouting.input.style.values.CSSStringType; -import org.jfree.layouting.input.style.values.CSSStringValue; -import org.jfree.layouting.input.style.values.CSSValue; -import org.jfree.layouting.input.style.values.CSSValueList; - -public class FontFamilyMapper implements StyleMapper -{ - - public FontFamilyMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSValue value = targetRule.getPropertyCSSValue(FontStyleKeys.FONT_FAMILY); - if (!(value instanceof CSSValueList)) - { - final CSSStringValue cssVal = new CSSStringValue(CSSStringType.STRING, attrValue); - targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, - new CSSValueList(new CSSValue[] - { - cssVal - })); - } - else - { - final CSSValueList list = (CSSValueList) value; - targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, - CSSValueList.insertFirst(list, value)); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper.java deleted file mode 100644 index 5609ef1e10bf..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; -import org.jfree.layouting.input.style.values.CSSStringType; -import org.jfree.layouting.input.style.values.CSSStringValue; - -public class FontNameMapper implements StyleMapper -{ - - public FontNameMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValue(FontStyleKeys.FONT_NAME, - new CSSStringValue(CSSStringType.STRING, attrValue)); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper.java deleted file mode 100644 index 1d462a72749b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; -import org.jfree.layouting.input.style.values.CSSConstant; - -public class FontPitchMapper extends OneOfConstantsMapper -{ - - public FontPitchMapper() - { - super(FontStyleKeys.FONT_PITCH); - addMapping("variable", new CSSConstant("variable")); - addMapping("fixed", new CSSConstant("fixed")); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper.java deleted file mode 100644 index 7f79a59813a3..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.font.FontStyleKeys; - -public class FontReliefMapper implements StyleMapper -{ - - public FontReliefMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(FontStyleKeys.FONT_EFFECT, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java deleted file mode 100644 index 8de923cd4e4c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; - -public class TextEmphasizeMapper implements StyleMapper -{ - - public TextEmphasizeMapper() - { - } - - public void updateStyle(final String uri, final String attrName, final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString("font-emphasize", attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java deleted file mode 100644 index 21b8118accd8..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.text.TextStyleKeys; -import org.jfree.layouting.input.style.values.CSSColorValue; -import org.jfree.layouting.util.ColorUtil; - -public class TextUnderlineColorMapper implements StyleMapper -{ - - public TextUnderlineColorMapper() - { - } - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); - if (cv != null) - { - targetRule.setPropertyValue(TextStyleKeys.TEXT_UNDERLINE_COLOR, cv); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java deleted file mode 100644 index c405f110f347..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.text.TextDecorationStyle; -import org.jfree.layouting.input.style.keys.text.TextStyleKeys; - -public class TextUnderlineStyleMapper extends OneOfConstantsMapper -{ - - public TextUnderlineStyleMapper() - { - super(TextStyleKeys.TEXT_UNDERLINE_STYLE); - addMapping("none", TextDecorationStyle.NONE); - addMapping("solid", TextDecorationStyle.SOLID); - addMapping("dotted", TextDecorationStyle.DOTTED); - addMapping("dash", TextDecorationStyle.DASHED); - addMapping("long-dash", TextDecorationStyle.LONG_DASH); - addMapping("dot-dash", TextDecorationStyle.DOT_DASH); - addMapping("dot-dot-dash", TextDecorationStyle.DOT_DOT_DASH); - addMapping("wave", TextDecorationStyle.WAVE); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java deleted file mode 100644 index 71f482c8a270..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.border.BorderWidth; -import org.jfree.layouting.input.style.keys.text.TextDecorationWidth; -import org.jfree.layouting.input.style.keys.text.TextStyleKeys; -import org.jfree.layouting.input.style.values.CSSAutoValue; -import org.jfree.layouting.input.style.values.CSSValue; - -public class TextUnderlineWidthMapper extends OneOfConstantsMapper -{ - - public TextUnderlineWidthMapper() - { - super(TextStyleKeys.TEXT_UNDERLINE_WIDTH); - addMapping("auto", CSSAutoValue.getInstance()); - addMapping("normal", BorderWidth.MEDIUM); - addMapping("bold", TextDecorationWidth.BOLD); - addMapping("thin", BorderWidth.THIN); - addMapping("dash", TextDecorationWidth.DASH); - addMapping("medium", BorderWidth.MEDIUM); - addMapping("thick", BorderWidth.THICK); - } - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - if (attrName == null) - { - throw new NullPointerException(); - } - - final CSSValue value = lookupMapping(attrValue); - if (value != null) - { - targetRule.setPropertyValue(getStyleKey(), value); - } - else - // percent - // positive integer - // positive length - { - targetRule.setPropertyValueAsString(getStyleKey(), attrValue); - } - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java deleted file mode 100644 index 12139d73ba99..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.text.TextDecorationMode; -import org.jfree.layouting.input.style.keys.text.TextStyleKeys; - -public class TextUnderlineWordMode extends OneOfConstantsMapper -{ - - public TextUnderlineWordMode() - { - super(TextStyleKeys.TEXT_UNDERLINE_MODE); - addMapping("continuous", TextDecorationMode.CONTINUOUS); - addMapping("skip-white-space", TextDecorationMode.SKIP_WHITE_SPACE); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java deleted file mode 100644 index 518fc0b87e4f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.style; - -import com.sun.star.report.pentaho.parser.stylemapper.OneOfConstantsMapper; - -import org.jfree.layouting.input.style.keys.line.LineStyleKeys; -import org.jfree.layouting.input.style.values.CSSAutoValue; -import org.jfree.layouting.input.style.values.CSSConstant; - -public class VerticalAlignMapper extends OneOfConstantsMapper -{ - - public VerticalAlignMapper() - { - super(LineStyleKeys.VERTICAL_ALIGN); - addMapping("top", new CSSConstant("top")); - addMapping("bottom", new CSSConstant("bottom")); - addMapping("middle", new CSSConstant("middle")); - addMapping("baseline", new CSSConstant("baseline")); - addMapping("auto", CSSAutoValue.getInstance()); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java deleted file mode 100644 index 7c262c5c503c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.table; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; - -/** - * Creation-Date: 03.07.2006, 13:08:27 - * - */ -public class ColumnWidthMapper implements StyleMapper -{ - - public ColumnWidthMapper() - { - } - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(BoxStyleKeys.WIDTH, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper.java deleted file mode 100644 index 3500e7b4fa3b..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.stylemapper.table; - -import com.sun.star.report.pentaho.parser.StyleMapper; - -import org.jfree.layouting.input.style.CSSDeclarationRule; -import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; - -/** - * Creation-Date: 03.07.2006, 13:08:27 - * - */ -public class RowHeightMapper implements StyleMapper -{ - - public RowHeightMapper() - { - } - - public void updateStyle(final String uri, - final String attrName, - final String attrValue, - final CSSDeclarationRule targetRule) - { - targetRule.setPropertyValueAsString(BoxStyleKeys.HEIGHT, attrValue); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler.java deleted file mode 100644 index 2c2c5d973cbe..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -/** - * Todo: Document me! - * - * @since 14.03.2007 - */ -public class CoveredCellReadHandler extends ElementReadHandler -{ - - private final Element coveredCell; - - public CoveredCellReadHandler() - { - coveredCell = new Section(); - } - - public Element getElement() - { - return coveredCell; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler.java deleted file mode 100644 index 07d139389e21..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.pentaho.model.TableCellElement; -import com.sun.star.report.pentaho.parser.text.NoCDATATextContentReadHandler; - -/** - * A read handler for table-cell contents. This is basicly a text-content - * read handler; we may extend this implementation later. - * - * @since 05.03.2007 - */ -public class TableCellReadHandler extends NoCDATATextContentReadHandler -{ - - public TableCellReadHandler() - { - super(new TableCellElement(), true); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler.java deleted file mode 100644 index 6c95744faf38..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -/** - * Creation-Date: 03.07.2006, 14:26:55 - * - */ -public class TableColumnReadHandler extends ElementReadHandler -{ - - private final Section tableColumn; - - public TableColumnReadHandler() - { - tableColumn = new Section(); - } - - public Element getElement() - { - return tableColumn; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler.java deleted file mode 100644 index 5357b9c14011..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Creation-Date: 03.07.2006, 13:50:41 - * - */ -public class TableColumnsReadHandler extends ElementReadHandler -{ - - private final List columns; - private final Section tableColumns; - - public TableColumnsReadHandler() - { - columns = new ArrayList(); - tableColumns = new Section(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.TABLE_NS.equals(uri) && OfficeToken.TABLE_COLUMN.equals(tagName)) - { - final TableColumnReadHandler readHandler = new TableColumnReadHandler(); - columns.add(readHandler); - return readHandler; - } - - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < columns.size(); i++) - { - final TableColumnReadHandler handler = columns.get(i); - tableColumns.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return tableColumns; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler.java deleted file mode 100644 index 86f34922d581..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.model.OfficeTableSection; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.rpt.ConditionalPrintExpressionReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Creation-Date: 03.07.2006, 13:47:47 - * - */ -public class TableReadHandler extends ElementReadHandler -{ - - private final List children; - private final Section table; - - public TableReadHandler() - { - children = new ArrayList(); - table = new OfficeTableSection(); - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) - throws SAXException - { - super.startParsing(attrs); - final String enabled = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "visible"); - if (enabled == null || OfficeToken.TRUE.equals(enabled)) - { - table.setEnabled(true); - } - else - { - table.setEnabled(false); - } - - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "conditional-print-expression".equals(tagName)) - { - return new ConditionalPrintExpressionReadHandler(table); - } - else if (OfficeNamespaces.TABLE_NS.equals(uri)) - { - if (OfficeToken.TABLE_COLUMNS.equals(tagName) || OfficeToken.TABLE_HEADER_COLUMNS.equals(tagName)) - { - final TableColumnsReadHandler columns = new TableColumnsReadHandler(); - children.add(columns); - return columns; - } - else if (OfficeToken.TABLE_ROW.equals(tagName)) - { - final TableRowReadHandler rowHandler = new TableRowReadHandler(); - children.add(rowHandler); - return rowHandler; - } - else if (OfficeToken.TABLE_ROWS.equals(tagName) || OfficeToken.TABLE_HEADER_ROWS.equals(tagName)) - { - final TableRowsReadHandler rowsHandler = new TableRowsReadHandler(); - children.add(rowsHandler); - return rowsHandler; - } - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final ElementReadHandler handler = children.get(i); - table.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return table; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler.java deleted file mode 100644 index fd48b7fa747f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Creation-Date: 03.07.2006, 13:51:47 - * - */ -public class TableRowReadHandler extends ElementReadHandler -{ - - private final List tableCells; - private final Section tableRow; - - public TableRowReadHandler() - { - tableCells = new ArrayList(); - tableRow = new Section(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - final ElementReadHandler rh; - if (OfficeNamespaces.TABLE_NS.equals(uri)) - { - if (OfficeToken.TABLE_CELL.equals(tagName)) - { - rh = new TableCellReadHandler(); - } - else if (OfficeToken.COVERED_TABLE_CELL.equals(tagName)) - { - rh = new CoveredCellReadHandler(); - } - else - { - rh = null; - } - if (rh != null) - { - tableCells.add(rh); - } - } - else - { - rh = null; - } - return rh; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < tableCells.size(); i++) - { - final ElementReadHandler handler = tableCells.get(i); - tableRow.addNode(handler.getElement()); - } - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Element getElement() - { - return tableRow; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler.java deleted file mode 100644 index ad196dc2e29f..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.table; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -public class TableRowsReadHandler extends ElementReadHandler -{ - - private final List rows; - private final Section tableRows; - - public TableRowsReadHandler() - { - rows = new ArrayList(); - tableRows = new Section(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.TABLE_NS.equals(uri) && OfficeToken.TABLE_ROW.equals(tagName)) - { - final TableRowReadHandler readHandler = new TableRowReadHandler(); - rows.add(readHandler); - return readHandler; - } - - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < rows.size(); i++) - { - final TableRowReadHandler handler = rows.get(i); - tableRows.addNode(handler.getElement()); - } - } - - public Element getElement() - { - return tableRows; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler.java deleted file mode 100644 index dbbbc807e2f1..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.report.pentaho.parser.text; - -import com.sun.star.report.OfficeToken; -import com.sun.star.report.pentaho.OfficeNamespaces; -import com.sun.star.report.pentaho.parser.ElementReadHandler; -import com.sun.star.report.pentaho.parser.rpt.FixedContentReadHandler; -import com.sun.star.report.pentaho.parser.rpt.FormattedTextReadHandler; -import com.sun.star.report.pentaho.parser.rpt.ImageReadHandler; -import com.sun.star.report.pentaho.parser.rpt.SubDocumentReadHandler; - -import java.util.ArrayList; -import java.util.List; - -import org.jfree.report.structure.Element; -import org.jfree.report.structure.Section; -import org.jfree.report.structure.StaticText; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * This is a generic implementation that accepts all input and adds special - * handlers for the report-elements. - * - */ -public class NoCDATATextContentReadHandler extends ElementReadHandler -{ - - private Section section; - private List children; - private boolean copyType; - - public NoCDATATextContentReadHandler(final Section section, - final boolean copyType) - { - this.children = new ArrayList(); - this.section = section; - this.copyType = copyType; - } - - public NoCDATATextContentReadHandler(final Section section) - { - this(section, false); - } - - public NoCDATATextContentReadHandler() - { - this(new Section(), true); - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - super.startParsing(attrs); - final Element element = getElement(); - if (copyType) - { - copyElementType(element); - } - copyAttributes(attrs, element); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (OfficeNamespaces.OOREPORT_NS.equals(uri)) - { - if ("fixed-content".equals(tagName)) - { - final FixedContentReadHandler fixedContentReadHandler = new FixedContentReadHandler(); - children.add(fixedContentReadHandler); - return fixedContentReadHandler; - } - if ("formatted-text".equals(tagName)) - { - final FormattedTextReadHandler formattedTextReadHandler = new FormattedTextReadHandler(); - children.add(formattedTextReadHandler); - return formattedTextReadHandler; - } - if (OfficeToken.IMAGE.equals(tagName)) - { - final ImageReadHandler imageReadHandler = new ImageReadHandler(); - children.add(imageReadHandler); - return imageReadHandler; - } - if ("sub-document".equals(tagName)) - { - final SubDocumentReadHandler subDocReadHandler = new SubDocumentReadHandler(section); - // children.add(subDocReadHandler); - return subDocReadHandler; - } - } - if (OfficeNamespaces.DRAWING_NS.equals(uri)) - { - final XmlReadHandler readHandler; - if (OfficeToken.IMAGE.equals(tagName)) - { - readHandler = new ImageReadHandler(); - } - else - { - readHandler = new NoCDATATextContentReadHandler(); - } - children.add(readHandler); - return readHandler; - } - else - { - final TextContentReadHandler readHandler = new TextContentReadHandler(); - children.add(readHandler); - return readHandler; - } - } - - public List getChildren() - { - return children; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() throws SAXException - { - for (int i = 0; i < children.size(); i++) - { - final Object o = children.get(i); - if (o instanceof ElementReadHandler) - { - final ElementReadHandler handler = (ElementReadHandler) o; - section.addNode(handler.getElement()); - } - else if (o instanceof StaticText) - { - section.addNode((StaticText) o); - } - } - } - - public Element getElement() - { - return section; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler.java deleted file mode 100644 index d50d15807102..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.text; - -import org.jfree.report.structure.Section; -import org.jfree.report.structure.StaticText; - -import org.xml.sax.SAXException; - -/** - * This is a generic implementation that accepts all input and adds special - * handlers for the report-elements. - * - */ -public class TextContentReadHandler extends NoCDATATextContentReadHandler -{ - - public TextContentReadHandler(final Section section, final boolean copyType) - { - super(section, copyType); - } - - public TextContentReadHandler(final Section section) - { - super(section); - } - - public TextContentReadHandler() - { - } - - /** - * This method is called to process the character data between element tags. - * - * @param ch the character buffer. - * @param start the start index. - * @param length the length. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - public void characters(final char[] ch, final int start, final int length) - throws SAXException - { - getChildren().add(new StaticText(new String(ch, start, length))); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler.java deleted file mode 100644 index 15a980f7811c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.parser.xlink; - -import com.sun.star.report.pentaho.OfficeNamespaces; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * An image reference. - * - */ -public class XLinkReadHandler extends AbstractXmlReadHandler -{ - - private String uri; - private String type; - private String show; - private String actuate; - - public XLinkReadHandler() - { - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) throws SAXException - { - uri = attrs.getValue(OfficeNamespaces.XLINK_NS, "uri"); - type = attrs.getValue(OfficeNamespaces.XLINK_NS, "type"); - show = attrs.getValue(OfficeNamespaces.XLINK_NS, "show"); - actuate = attrs.getValue(OfficeNamespaces.XLINK_NS, "actuate"); - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() throws SAXException - { - return uri; - } - - public String getUri() - { - return uri; - } - - public String getType() - { - return type; - } - - public String getShow() - { - return show; - } - - public String getActuate() - { - return actuate; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/smil.css b/reportbuilder/java/com/sun/star/report/pentaho/smil.css deleted file mode 100644 index 54d59ac828e2..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/smil.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"); - -/** - * All default styles for formating-objects elements (if there are any). -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/star-office.css b/reportbuilder/java/com/sun/star/report/pentaho/star-office.css deleted file mode 100644 index 22d57ca05a18..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/star-office.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("http://openoffice.org/2004/office"); - -/** - * All default styles for office elements. -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/star-report.css b/reportbuilder/java/com/sun/star/report/pentaho/star-report.css deleted file mode 100644 index b063d3563dbc..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/star-report.css +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -@namespace table url("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); -@namespace text url("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); -@namespace report url("http://openoffice.org/2005/report"); - -table|table { - display: table; -} - -table|table-columns { - display: table-column-group; -} - -table|table-column { - display: table-column; -} - -table|table-row { - display: table-row; -} - -table|table-cell { - display: table-cell; -} - -table|table-cell[number-columns-spanned], -table|table-cell[number-columns-spanned], -table|table-columns[number-columns-spanned], -table|table-column[number-columns-spanned] { - -x-liblayout-colspan: attr("table|number-columns-spanned"); -} - -table|table-cell[number-rows-spanned], -table|table-cell[number-rows-spanned] { - -x-liblayout-rowspan: attr("table|number-rows-spanned"); -} - - -/** - * Style definitions for star report. -*/ -* { - vertical-align: baseline; -} - -/** - * A standard number format declaration. The number of decimal places - * and whether there is grouping is defined by the format string. - * - * The position and content of embedded text is also derived directly from - * the given format string text. - - number - scientific - text - boolean - date - currency - percentage - fraction - -*/ -@format number myname { - -x-liblayout-decimal-replacement: "-"; - -x-liblayout-display-factor: 1000; - content: "'Prefix'#,##0.00'postfix'"; -} - -@format scientific anothername { - /* to be filled */ -} - - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css b/reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css deleted file mode 100644 index 47b6aca74d00..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("http://openoffice.org/2005/report"); - -/** - * All default styles for report elements. -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator.java deleted file mode 100644 index db5ee11a29bc..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import org.jfree.layouting.input.style.values.CSSNumericType; -import org.jfree.layouting.input.style.values.CSSNumericValue; - -/** - * A helper class that sums up various CSS-length. The various unit types are - * kept separate until the final result is computed to minimize the computation - * inaccuracy. - * - * @since 15.03.2007 - */ -public class LengthCalculator -{ - // and centimeter (x10) - - private double millimeter; - // and pica (x12) and inch(x72). Px is assumed to be in 96dpi. - private double point; - private double pixel; - - public LengthCalculator() - { - } - - public void add(final CSSNumericValue value) - { - if (value == null) - { - return; - } - - final CSSNumericType numericType = value.getType(); - if (numericType == CSSNumericType.CM) - { - millimeter += value.getValue() * 10; - } - else if (numericType == CSSNumericType.MM) - { - millimeter += value.getValue(); - } - else if (numericType == CSSNumericType.PT) - { - point += value.getValue(); - } - else if (numericType == CSSNumericType.PC) - { - point += 12 * value.getValue(); - } - else if (numericType == CSSNumericType.INCH) - { - point += 72 * value.getValue(); - } - else if (numericType == CSSNumericType.PX) - { - pixel += value.getValue(); - } - // LOGGER.debug ("Adding " + value + " [mm: " + millimeter + "] [pt: " + point + "] px: [" + pixel + "]"); - } - - public CSSNumericValue getResult() - { - if (pixel == 0 && point == 0) - { - return CSSNumericValue.createValue(CSSNumericType.MM, millimeter); - } - if (pixel == 0 && millimeter == 0) - { - return CSSNumericValue.createValue(CSSNumericType.PT, point); - } - if (point == 0 && millimeter == 0) - { - return CSSNumericValue.createValue(CSSNumericType.PX, pixel); - } - // else convert it. - - double result = point; - result += (millimeter * 10 * 72 / 254); - result += pixel * 72 / 96; - - return CSSNumericValue.createValue(CSSNumericType.PT, result); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper.java deleted file mode 100644 index f612af8ac865..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import java.util.HashMap; -import java.util.Map; - -import org.pentaho.reporting.libraries.resourceloader.Resource; -import org.pentaho.reporting.libraries.resourceloader.ResourceException; -import org.pentaho.reporting.libraries.resourceloader.ResourceManager; - - -/** - * The style-mapper holds all information about the OpenOffice style mapping - * mechanism. OpenOffice references styles by their name and context, a style - * has a style-family assigned. The style family is determined by the element - * referencing the style, and there is no easily accessible information - * available on that. - *

- * Therefore this mapper acts as gatekeeper for this information. The style - * mapping information is read from an external definition file and can be - * maintained externally. - * - * @since 11.03.2007 - */ -public class StyleMapper -{ - - private final Map backend; - - public StyleMapper() - { - this.backend = new HashMap(); - } - - public void addMapping(final StyleMappingRule rule) - { - backend.put(rule.getKey(), rule); - } - - public boolean isListOfStyles(final String elementNamespace, - final String elementTagName, - final String attributeNamespace, - final String attributeName) - { - final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementTagName, attributeNamespace, attributeName); - final StyleMappingRule rule = backend.get(key); - return rule != null && rule.isListOfValues(); - } - - public String getStyleFamilyFor(final String elementNamespace, - final String elementTagName, - final String attributeNamespace, - final String attributeName) - { - final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementTagName, attributeNamespace, attributeName); - final StyleMappingRule rule = backend.get(key); - if (rule == null) - { - return null; - } - return rule.getFamily(); - } - - public static StyleMapper loadInstance(final ResourceManager resourceManager) - throws ResourceException - { - final Resource resource = resourceManager.createDirectly("res://com/sun/star/report/pentaho/styles/stylemapper.xml", StyleMapper.class); - return (StyleMapper) resource.getResource(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey.java deleted file mode 100644 index d5a0d9b90a26..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -/** - * A hash key for the stylemapper. - * - * @since 12.03.2007 - */ -public final class StyleMapperKey -{ - - private final String elementNamespace; - private final String elementName; - private final String attributeNamespace; - private final String attributeName; - private final int hashCode; - - public StyleMapperKey(final String elementNamespace, - final String elementName, - final String attributeNamespace, - final String attributeName) - { - if (elementNamespace == null) - { - throw new NullPointerException(); - } - if (elementName == null) - { - throw new NullPointerException(); - } - - this.elementNamespace = elementNamespace; - this.elementName = elementName; - this.attributeNamespace = attributeNamespace; - this.attributeName = attributeName; - this.hashCode = computeHashCode(); - } - - public String getElementNamespace() - { - return elementNamespace; - } - - public String getElementName() - { - return elementName; - } - - public String getAttributeNamespace() - { - return attributeNamespace; - } - - public String getAttributeName() - { - return attributeName; - } - - public boolean equals(final Object o) - { - if (this != o) - { - if (o == null || getClass() != o.getClass()) - { - return false; - } - - final StyleMapperKey that = (StyleMapperKey) o; - - if ((attributeName != null ? !attributeName.equals(that.attributeName) : that.attributeName != null) || (attributeNamespace != null ? !attributeNamespace.equals(that.attributeNamespace) : that.attributeNamespace != null) || !elementName.equals(that.elementName) || !elementNamespace.equals(that.elementNamespace)) - { - return false; - } - } - - return true; - } - - private int computeHashCode() - { - int result = elementNamespace.hashCode(); - result = 31 * result + elementName.hashCode(); - result = 31 * result + (attributeNamespace != null ? attributeNamespace.hashCode() : 0); - result = 31 * result + (attributeName != null ? attributeName.hashCode() : 0); - return result; - } - - public int hashCode() - { - return hashCode; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule.java deleted file mode 100644 index 34195011daed..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; -import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -/** - * An XML-FactoryModule that load the style-mapper contents. - * - * @since 12.03.2007 - */ -public class StyleMapperXmlFactoryModule implements XmlFactoryModule -{ - - public static final String NAMESPACE = - "http://jfreereport.sourceforge.net/namespaces/engine/openoffice/stylemapper"; - - public StyleMapperXmlFactoryModule() - { - } - - public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) - { - return new StyleMappingDocumentReadHandler(); - } - - public int getDocumentSupport(final XmlDocumentInfo documentInfo) - { - final String rootNamespace = documentInfo.getRootElementNameSpace(); - if (StyleMapperXmlFactoryModule.NAMESPACE.equals(rootNamespace) && "style-mapper-definition".equals(documentInfo.getRootElement())) - { - - return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; - } - return XmlFactoryModule.NOT_RECOGNIZED; - } - - public String getDefaultNamespace(final XmlDocumentInfo documentInfo) - { - return null; - } -} - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory.java deleted file mode 100644 index bafeea4523ce..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import org.jfree.report.JFreeReportBoot; - -import org.pentaho.reporting.libraries.base.config.Configuration; -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlResourceFactory; - -/** - * Todo: Document me! - * - * @since 12.03.2007 - */ -public class StyleMapperXmlResourceFactory extends AbstractXmlResourceFactory -{ - - public StyleMapperXmlResourceFactory() - { - } - - protected Configuration getConfiguration() - { - return JFreeReportBoot.getInstance().getGlobalConfig(); - } - - public Class getFactoryType() - { - return StyleMapper.class; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler.java deleted file mode 100644 index 57d05fb24767..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import java.util.ArrayList; -import java.util.List; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - - -/** - * Todo: Document me! - * - * @since 12.03.2007 - */ -public class StyleMappingDocumentReadHandler extends AbstractXmlReadHandler -{ - - private final StyleMapper styleMapper; - private final List mappings; - - public StyleMappingDocumentReadHandler() - { - this.mappings = new ArrayList(); - this.styleMapper = new StyleMapper(); - } - - /** - * Returns the handler for a child element. - * - * @param tagName the tag name. - * @param atts the attributes. - * @return the handler or null, if the tagname is invalid. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected XmlReadHandler getHandlerForChild(final String uri, - final String tagName, - final Attributes atts) - throws SAXException - { - if (isSameNamespace(uri) && "mapping".equals(tagName)) - { - final StyleMappingReadHandler smr = new StyleMappingReadHandler(); - mappings.add(smr); - return smr; - } - return null; - } - - /** - * Done parsing. - * - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void doneParsing() - throws SAXException - { - for (int i = 0; i < mappings.size(); i++) - { - final StyleMappingReadHandler handler = mappings.get(i); - styleMapper.addMapping(handler.getRule()); - } - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public StyleMapper getObject() - throws SAXException - { - return styleMapper; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler.java deleted file mode 100644 index 0b0ccbddd629..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; -import org.pentaho.reporting.libraries.xmlns.parser.ParseException; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -/** - * Todo: Document me! - * - * @since 12.03.2007 - */ -public class StyleMappingReadHandler extends AbstractXmlReadHandler -{ - - private StyleMappingRule rule; - - public StyleMappingReadHandler() - { - } - - /** - * Starts parsing. - * - * @param attrs the attributes. - * @throws org.xml.sax.SAXException if there is a parsing error. - */ - protected void startParsing(final Attributes attrs) - throws SAXException - { - final String elementNamespace = attrs.getValue(getUri(), - "element-namespace"); - if (elementNamespace == null) - { - throw new ParseException("Required attribute 'element-namespace' is missing", getLocator()); - } - - final String elementName = attrs.getValue(getUri(), "element-name"); - - if (elementName == null) - { - throw new ParseException("Required attribute 'element-name' is missing", getLocator()); - } - - final String attributeNamespace = attrs.getValue(getUri(), - "attribute-namespace"); - final String attributeName = attrs.getValue(getUri(), "attribute-name"); - - final boolean listOfValues = - "styleNameRefs".equals(attrs.getValue(getUri(), "type")); - - final String family = attrs.getValue(getUri(), "style-family"); - final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementName, attributeNamespace, attributeName); - rule = new StyleMappingRule(key, family, listOfValues); - } - - public StyleMappingRule getRule() - { - return rule; - } - - /** - * Returns the object for this element or null, if this element does not - * create an object. - * - * @return the object. - */ - public Object getObject() - throws SAXException - { - return rule; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule.java b/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule.java deleted file mode 100644 index 7a486e07786c..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.pentaho.styles; - -/** - * Todo: Document me! - * - * @since 12.03.2007 - */ -public class StyleMappingRule -{ - - private final StyleMapperKey key; - private final String family; - private final boolean listOfValues; - - public StyleMappingRule(final StyleMapperKey key, final String family, - final boolean listOfValues) - { - this.key = key; - this.family = family; - this.listOfValues = listOfValues; - } - - public StyleMapperKey getKey() - { - return key; - } - - public String getFamily() - { - return family; - } - - public boolean isListOfValues() - { - return listOfValues; - } -} diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml b/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml deleted file mode 100644 index 8e5e5bc49aab..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd b/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd deleted file mode 100644 index feb7234e83c0..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd +++ /dev/null @@ -1,81 +0,0 @@ - - - - - This schema describes the format of the stylemapper definition file. - The stylemapper declares what style-families are referenced by an element. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reportbuilder/java/com/sun/star/report/pentaho/svg.css b/reportbuilder/java/com/sun/star/report/pentaho/svg.css deleted file mode 100644 index ebe16e30b115..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/svg.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"); - -/** - * All default styles for formating-objects elements (if there are any). -*/ diff --git a/reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css b/reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css deleted file mode 100644 index f030a3872481..000000000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css +++ /dev/null @@ -1,5 +0,0 @@ -@namespace url("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"); - -/** - * All default styles for formating-objects elements (if there are any). -*/ diff --git a/reportbuilder/java/com/sun/star/report/util/DefaultJobProperties.java b/reportbuilder/java/com/sun/star/report/util/DefaultJobProperties.java deleted file mode 100644 index 0775c79dd33d..000000000000 --- a/reportbuilder/java/com/sun/star/report/util/DefaultJobProperties.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.util; - -import com.sun.star.report.JobDefinitionException; -import com.sun.star.report.JobProperties; -import com.sun.star.report.ReportEngineMetaData; - -import java.util.HashMap; -import java.util.Map; - - -public class DefaultJobProperties implements JobProperties -{ - - private final ReportEngineMetaData metaData; - private final Map properties; - - public DefaultJobProperties(final ReportEngineMetaData metaData) - { - if (metaData == null) - { - throw new NullPointerException(); - } - this.properties = new HashMap(); - this.metaData = metaData; - } - - public Object getProperty(final String key) - { - return properties.get(key); - } - - public void setProperty(final String key, final Object value) - throws JobDefinitionException - { - final Class type = metaData.getParameterType(key); - if (type == null) - { - throw new JobDefinitionException("The parameter name is not known: " + key); - } - if (!type.isInstance(value)) - { - throw new JobDefinitionException("The parameter value is not understood"); - } - - this.properties.put(key, value); - } - - public JobProperties copy() - { - final DefaultJobProperties props = new DefaultJobProperties(metaData); - props.properties.putAll(properties); - return props; - } -} diff --git a/reportbuilder/java/com/sun/star/report/util/DefaultParameterMap.java b/reportbuilder/java/com/sun/star/report/util/DefaultParameterMap.java deleted file mode 100644 index 61e71b33db0c..000000000000 --- a/reportbuilder/java/com/sun/star/report/util/DefaultParameterMap.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.util; - -import com.sun.star.report.ParameterMap; - -import java.util.HashMap; -import java.util.Map; - - -public class DefaultParameterMap implements ParameterMap -{ - - private final Map backend; - - public DefaultParameterMap() - { - backend = new HashMap(); - } - - public void clear() - { - backend.clear(); - } - - /** - * Retrieves the value stored for a key in this properties collection. - * - * @param key the property key. - * @return The stored value, or null if the key does not exist in this - * collection. - */ - public Object get(final String key) - { - if (key == null) - { - throw new NullPointerException("DefaultParameterMap.get (..): Parameter 'key' must not be null"); - } - return backend.get(key); - } - - /** - * Retrieves the value stored for a key in this properties collection, and returning the - * default value if the key was not stored in this properties collection. - * - * @param key the property key. - * @param defaultValue the default value to be returned when the key is not stored in - * this properties collection. - * @return The stored value, or the default value if the key does not exist in this - * collection. - */ - public Object get(final String key, final Object defaultValue) - { - if (key == null) - { - throw new NullPointerException("DefaultParameterMap.get (..): Parameter 'key' must not be null"); - } - final Object o = this.backend.get(key); - if (o == null) - { - return defaultValue; - } - return o; - } - - public String[] keys() - { - return this.backend.keySet().toArray(new String[backend.size()]); - } - - /** - * Adds a property to this properties collection. If a property with the given name - * exist, the property will be replaced with the new value. If the value is null, the - * property will be removed. - * - * @param key the property key. - * @param value the property value. - */ - public void put(final String key, final Object value) - { - if (key == null) - { - throw new NullPointerException("ReportProperties.put (..): Parameter 'key' must not be null"); - } - if (value == null) - { - this.backend.remove(key); - } - else - { - this.backend.put(key, value); - } - } - - public int size() - { - return this.backend.size(); - } -} diff --git a/reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition.java b/reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition.java deleted file mode 100644 index 8fdef315b253..000000000000 --- a/reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.util; - -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.InputRepository; -import com.sun.star.report.JobDefinitionException; -import com.sun.star.report.JobProperties; -import com.sun.star.report.OutputRepository; -import com.sun.star.report.ParameterMap; -import com.sun.star.report.ReportEngineMetaData; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportJobDefinition; - -public class DefaultReportJobDefinition implements ReportJobDefinition -{ - - public static final String OUTPUT_TYPE = "output-type"; - private final DefaultParameterMap parameters; - private final DefaultJobProperties properties; - - public DefaultReportJobDefinition(final ReportEngineMetaData metaData) - { - this.parameters = new DefaultParameterMap(); - this.properties = new DefaultJobProperties(metaData); - } - - public void setDataSourceFactory(final DataSourceFactory dataSourceFactory) - throws JobDefinitionException - { - this.properties.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataSourceFactory); - } - - public DataSourceFactory getDataSourceFactory() - { - return (DataSourceFactory) this.properties.getProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); - } - - public InputRepository getInputRepository() - { - return (InputRepository) this.properties.getProperty(ReportEngineParameterNames.INPUT_REPOSITORY); - } - - public void setInputRepository(final InputRepository inputRepository) - throws JobDefinitionException - { - this.properties.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, inputRepository); - } - - public OutputRepository getOutputRepository() - { - return (OutputRepository) this.properties.getProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY); - } - - public void setOutputRepository(final OutputRepository outputRepository) - throws JobDefinitionException - { - this.properties.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, outputRepository); - } - - /** - * The parameters of the root report definition. The parameters for the subreports are - * defined using mappings, it would not make sense to define them here. - * - * @return a map container for query parameters. - */ - public ParameterMap getQueryParameters() - { - return parameters; - } - - public void setReportDefinitionName(final String reportDefinitionName) - throws JobDefinitionException - { - this.properties.setProperty(ReportEngineParameterNames.INPUT_NAME, reportDefinitionName); - } - - /** - * The name under which we can load the report definition. - * - * @return the report definition's name. - */ - public String getReportDefinitionName() - { - return (String) this.properties.getProperty(ReportEngineParameterNames.INPUT_NAME); - } - - public JobProperties getProcessingParameters() - { - return properties; - } -} diff --git a/reportbuilder/java/com/sun/star/report/util/ManifestWriter.java b/reportbuilder/java/com/sun/star/report/util/ManifestWriter.java deleted file mode 100644 index afae91286ab6..000000000000 --- a/reportbuilder/java/com/sun/star/report/util/ManifestWriter.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.report.util; - -import com.sun.star.report.OutputRepository; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.jfree.report.JFreeReportBoot; - -import org.pentaho.reporting.libraries.xmlns.common.AttributeList; -import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; -import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; - - -/** - * Creation-Date: 24.07.2007, 18:16:52 - * - */ -public class ManifestWriter -{ - // need this two strings other it breaks the ooo build :-( - - public static final String MANIFEST_NS = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"; - public static final String TAG_DEF_PREFIX = "com.sun.star.report.pentaho.output."; - private final Map entries; - - public ManifestWriter() - { - entries = new HashMap(); - } - - public void addEntry(final String fullPath, final String mimeType) - { - if (fullPath == null) - { - throw new NullPointerException(); - } - if (mimeType == null) - { - throw new NullPointerException(); - } - if ("META-INF/manifest.xml".equals(fullPath)) - { - return; - } - entries.put(fullPath, mimeType); - } - - public boolean isEmpty() - { - return entries.isEmpty(); - } - - public void write(final OutputRepository outputRepository) throws IOException - { - if (isEmpty()) - { - return; - } - - final DefaultTagDescription tagDescription = new DefaultTagDescription(); - tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), - TAG_DEF_PREFIX); - - final OutputStream manifestOutputStream = - outputRepository.createOutputStream("META-INF/manifest.xml", "text/xml"); - - final OutputStreamWriter writer = new OutputStreamWriter(manifestOutputStream, "UTF-8"); - final XmlWriter xmlWriter = new XmlWriter(writer, tagDescription); - xmlWriter.setAlwaysAddNamespace(true); - xmlWriter.writeXmlDeclaration("UTF-8"); - - final AttributeList rootAttributes = new AttributeList(); - rootAttributes.addNamespaceDeclaration("manifest", MANIFEST_NS); - xmlWriter.writeTag(MANIFEST_NS, "manifest", rootAttributes, XmlWriterSupport.OPEN); - - final Iterator> iterator = entries.entrySet().iterator(); - while (iterator.hasNext()) - { - final Map.Entry entry = iterator.next(); - final AttributeList entryAttrs = new AttributeList(); - entryAttrs.setAttribute(MANIFEST_NS, "media-type", entry.getValue()); - entryAttrs.setAttribute(MANIFEST_NS, "full-path", entry.getKey()); - xmlWriter.writeTag(MANIFEST_NS, "file-entry", entryAttrs, XmlWriterSupport.CLOSE); - } - - xmlWriter.writeCloseTag(); - xmlWriter.close(); - } -} diff --git a/reportbuilder/java/jfreereport.properties b/reportbuilder/java/jfreereport.properties index 06ee4a7bb4cb..b646efecc78d 100644 --- a/reportbuilder/java/jfreereport.properties +++ b/reportbuilder/java/jfreereport.properties @@ -17,5 +17,5 @@ # # x-no-translate -org.jfree.report.modules.sun.report.Module=com.sun.star.report.pentaho.StarReportModule +org.jfree.report.modules.sun.report.Module=org.libreoffice.report.pentaho.StarReportModule diff --git a/reportbuilder/java/libformula.properties b/reportbuilder/java/libformula.properties index 78d0e75f2cc1..f903736de043 100644 --- a/reportbuilder/java/libformula.properties +++ b/reportbuilder/java/libformula.properties @@ -28,7 +28,7 @@ org.pentaho.reporting.libraries.formula.datesystem.ExcelHack=false ## # Meta data functions -org.pentaho.reporting.libraries.formula.functions.metadata.Author.class=com.sun.star.report.function.metadata.AuthorFunction -org.pentaho.reporting.libraries.formula.functions.metadata.Author.description=com.sun.star.report.function.metadata.AuthorFunctionDescription -org.pentaho.reporting.libraries.formula.functions.metadata.Title.class=com.sun.star.report.function.metadata.TitleFunction -org.pentaho.reporting.libraries.formula.functions.metadata.Title.description=com.sun.star.report.function.metadata.TitleFunctionDescription +org.pentaho.reporting.libraries.formula.functions.metadata.Author.class=org.libreoffice.report.function.metadata.AuthorFunction +org.pentaho.reporting.libraries.formula.functions.metadata.Author.description=org.libreoffice.report.function.metadata.AuthorFunctionDescription +org.pentaho.reporting.libraries.formula.functions.metadata.Title.class=org.libreoffice.report.function.metadata.TitleFunction +org.pentaho.reporting.libraries.formula.functions.metadata.Title.description=org.libreoffice.report.function.metadata.TitleFunctionDescription diff --git a/reportbuilder/java/loader.properties b/reportbuilder/java/loader.properties index e6fabf0db3bd..87120b50bc90 100644 --- a/reportbuilder/java/loader.properties +++ b/reportbuilder/java/loader.properties @@ -17,6 +17,6 @@ # # x-no-translate -org.pentaho.reporting.libraries.resourceloader.factory.type.com.sun.star.report.pentaho.model.OfficeDocument=com.sun.star.report.pentaho.parser.OfficeDocumentXmlResourceFactory -org.pentaho.reporting.libraries.resourceloader.factory.type.com.sun.star.report.pentaho.model.OfficeStylesCollection=com.sun.star.report.pentaho.parser.OfficeStylesXmlResourceFactory -org.pentaho.reporting.libraries.resourceloader.factory.type.com.sun.star.report.pentaho.styles.StyleMapper=com.sun.star.report.pentaho.styles.StyleMapperXmlResourceFactory +org.pentaho.reporting.libraries.resourceloader.factory.type.org.libreoffice.report.pentaho.model.OfficeDocument=org.libreoffice.report.pentaho.parser.OfficeDocumentXmlResourceFactory +org.pentaho.reporting.libraries.resourceloader.factory.type.org.libreoffice.report.pentaho.model.OfficeStylesCollection=org.libreoffice.report.pentaho.parser.OfficeStylesXmlResourceFactory +org.pentaho.reporting.libraries.resourceloader.factory.type.org.libreoffice.report.pentaho.styles.StyleMapper=org.libreoffice.report.pentaho.styles.StyleMapperXmlResourceFactory diff --git a/reportbuilder/java/org/libreoffice/report/DataRow.java b/reportbuilder/java/org/libreoffice/report/DataRow.java new file mode 100644 index 000000000000..5c0566199483 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/DataRow.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * This feeds data into the reporting engine, in case the data has been provided + * by the caller. The methods are a mix of TableModel methods and methods borrowed + * from the java.sql.ResultSet interface. + * + * The column and row index starts at 1 (as it is done in JDBC). + * + */ +public interface DataRow +{ + + int getColumnCount() throws DataSourceException; + + String getColumnName(int column) throws DataSourceException; + + Object getObject(int column) throws DataSourceException; +} diff --git a/reportbuilder/java/org/libreoffice/report/DataSource.java b/reportbuilder/java/org/libreoffice/report/DataSource.java new file mode 100644 index 000000000000..ebdc314eeb82 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/DataSource.java @@ -0,0 +1,38 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * This feeds data into the reporting engine, in case the data has been provided + * by the caller. The methods are a mix of TableModel methods and methods borrowed + * from the java.sql.ResultSet interface. + * + * The column and row index starts at 1 (as it is done in JDBC). + * + */ +public interface DataSource extends DataRow +{ + + int getRowCount() throws DataSourceException; + + boolean absolute(int row) throws DataSourceException; + + boolean next() throws DataSourceException; + + void close() throws DataSourceException; +} diff --git a/reportbuilder/java/org/libreoffice/report/DataSourceException.java b/reportbuilder/java/org/libreoffice/report/DataSourceException.java new file mode 100644 index 000000000000..abcef53349aa --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/DataSourceException.java @@ -0,0 +1,84 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * A general exception to indicate that there was an error while accessing the + * datasource. + * + */ +public class DataSourceException extends Exception +{ + + /** + * Constructs a new exception with null as its detail message. + * The cause is not initialized, and may subsequently be initialized by a call + * to {@link #initCause}. + */ + public DataSourceException() + { + super(); + } + + /** + * Constructs a new exception with the specified detail message. The cause is + * not initialized, and may subsequently be initialized by a call to {@link + * #initCause}. + * + * @param message the detail message. The detail message is saved for later + * retrieval by the {@link #getMessage()} method. + */ + public DataSourceException(String message) + { + super(message); + } + + /** + * Constructs a new exception with the specified detail message and cause. + *

Note that the detail message associated with cause is + * not automatically incorporated in this exception's detail message. + * + * @param message the detail message (which is saved for later retrieval by + * the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the {@link + * #getCause()} method). (A null value is permitted, + * and indicates that the cause is nonexistent or unknown.) + * @since 1.4 + */ + public DataSourceException(String message, Throwable cause) + { + super(message, cause); + } + + /** + * Constructs a new exception with the specified cause and a detail message of + * (cause==null ? null : cause.toString()) (which typically contains + * the class and detail message of cause). This constructor is useful + * for exceptions that are little more than wrappers for other throwables (for + * example, {@link PrivilegedActionException}). + * + * @param cause the cause (which is saved for later retrieval by the {@link + * #getCause()} method). (A null value is permitted, + * and indicates that the cause is nonexistent or unknown.) + * @since 1.4 + */ + public DataSourceException(Throwable cause) + { + super(cause); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/DataSourceFactory.java b/reportbuilder/java/org/libreoffice/report/DataSourceFactory.java new file mode 100644 index 000000000000..9987a6a963e2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/DataSourceFactory.java @@ -0,0 +1,33 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import java.util.Map; + +/** + * Allows to query the data repository and returns a datasource for the + * specified name and parameters. The parameters-map can be null, if there + * are no parameters required. + * + */ +public interface DataSourceFactory +{ + + public DataSource queryData(String name, Map parameters) + throws DataSourceException; +} diff --git a/reportbuilder/java/org/libreoffice/report/ImageService.java b/reportbuilder/java/org/libreoffice/report/ImageService.java new file mode 100644 index 000000000000..4089a0c42b65 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ImageService.java @@ -0,0 +1,57 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.awt.Size; + +import java.io.InputStream; + +public interface ImageService +{ + + /** + * @param image + * @return the mime-type of the image as string. + * @throws ReportExecutionException + */ + String getMimeType(final InputStream image) throws ReportExecutionException; + + /** + * @param image + * @return the mime-type of the image as string. + * @throws ReportExecutionException + */ + String getMimeType(final byte[] image) throws ReportExecutionException; + + /** + * @param image + * @returns the dimension in 100th mm. + * + * @throws ReportExecutionException + * @return*/ + Size getImageSize(final InputStream image) throws ReportExecutionException; + + /** + * @param image + * @returns the dimension in 100th mm. + * + * @throws ReportExecutionException + * @return*/ + Size getImageSize(final byte[] image) throws ReportExecutionException; +} + diff --git a/reportbuilder/java/org/libreoffice/report/InputRepository.java b/reportbuilder/java/org/libreoffice/report/InputRepository.java new file mode 100644 index 000000000000..bbaec3eaafe2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/InputRepository.java @@ -0,0 +1,78 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import java.io.IOException; +import java.io.InputStream; + +/** + * This allows the job processor to load data from a repository. It is assumed, + * that all resource names are given as strings and furthermore, that the names + * identify a resource uniquely within the input repository. + * + * An input repository connects the report processing to the xml definitions. + * Unless defined otherwise, it is assumed, that the input-name is 'content.xml'; + * possible other files are 'settings.xml' and 'styles.xml' (see the Oasis standard + * for details on these files and their contents). + * + */ +public interface InputRepository +{ + + /** + * Returns a unique identifier for this repository. Two repositories accessing + * the same location should return the same id. The identifier must never + * be null. + * + * @return the repository id + */ + Object getId(); + + InputStream createInputStream(final String name) throws IOException; + + /** allows to acces sub repositories inside this repository + * + * @param name describes the path to the sub repository + * @return the sub repository + * @throws java.io.IOException when the sub repository doesn't exist. + */ + InputRepository openInputRepository(final String name) throws IOException; + + /** + * This returns an version number for the given resource. Return zero, if + * the resource is not versionable, else return a unique number for each version. + * As rule of thumb: Increase the version number by at least one for each change + * made to the resource. + * + * @param name the name of the resource + * @return the version number + */ + long getVersion(final String name); + + boolean exists(final String name); + + boolean isReadable(final String name); + + void closeInputRepository(); + + /** returns the URL of the database document + * + * @return the URL of the database document + */ + String getRootURL(); +} diff --git a/reportbuilder/java/org/libreoffice/report/JobDefinitionException.java b/reportbuilder/java/org/libreoffice/report/JobDefinitionException.java new file mode 100644 index 000000000000..06e7ac0018cb --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/JobDefinitionException.java @@ -0,0 +1,54 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * Creation-Date: 05.02.2006, 17:36:33 + * + */ +public class JobDefinitionException extends RuntimeException +{ + + /** + * Creates a StackableRuntimeException with no message and no parent. + */ + public JobDefinitionException() + { + } + + /** + * Creates an exception. + * + * @param message the exception message. + */ + public JobDefinitionException(final String message) + { + super(message); + } + + /** + * Creates an exception. + * + * @param message the exception message. + * @param ex the parent exception. + */ + public JobDefinitionException(final String message, final Exception ex) + { + super(message, ex); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/JobProgressIndicator.java b/reportbuilder/java/org/libreoffice/report/JobProgressIndicator.java new file mode 100644 index 000000000000..2f51de5fae7a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/JobProgressIndicator.java @@ -0,0 +1,69 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * Based on + * http://api.libreoffice.org/docs/common/ref/com/sun/star/task/XStatusIndicator.html + * + */ +public interface JobProgressIndicator +{ + + /** + * Updates the progress description. + * + * @param string the new description + */ + void setText(String string); + + /** + * Initializes the progress indicator and sets the progress description to + * the text given in the parameter text. The progress values + * passed to this indicator will not exceed the given maxValue. + * The value range of this indicator is set to 0 to maxValue + * Stopped indicators must ignore that call. + * + * @param string the progress description + * @param text + * @param maxValue the maximum value + * @see JobProgressIndicator#setText(String) + */ + void start(String text, int maxValue); + + /** + * Updates the value to the specified value. Invalid values must be ignored. + * Stopped indicators must ignore that call. + * + * @param value the new value that should be shown now. This must fit the + * range [0..maxValue] as defined in {@link JobProgressIndicator#start(String, int)}. + */ + void setValue(int value); + + /** + * Stop the progress. A progress indicator cannot be destructed before end() + * has been called. + */ + void end(); + + /** + * Clear progress value and description. Calling of setValue(0) and + * setText("") should do the same. Stopped indicators must ignore this call. + */ + void reset(); +} diff --git a/reportbuilder/java/org/libreoffice/report/JobProperties.java b/reportbuilder/java/org/libreoffice/report/JobProperties.java new file mode 100644 index 000000000000..42813428d2c4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/JobProperties.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +public interface JobProperties +{ + + void setProperty(String key, Object value) + throws JobDefinitionException; + + Object getProperty(String key); + + /** + * A type safe clone operation. We derive a copy of all properties, + * so that changes to the original job properties collection does not + * affect the copy. + * + * @return a copy. + */ + JobProperties copy(); +} diff --git a/reportbuilder/java/org/libreoffice/report/OfficeToken.java b/reportbuilder/java/org/libreoffice/report/OfficeToken.java new file mode 100644 index 000000000000..76bc897d09be --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/OfficeToken.java @@ -0,0 +1,52 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +public class OfficeToken +{ + + public static final String GRAPHIC = "graphic"; + public static final String GRAPHICS = "Graphics"; + public static final String GRAPHIC_PROPERTIES = "graphic-properties"; + public static final String PARAGRAPH = "paragraph"; + public static final String TRUE = "true"; + public static final String FALSE = "false"; + public static final String FRAME = "frame"; + public static final String STYLE_NAME = "style-name"; + public static final String BACKGROUND_COLOR = "background-color"; + public static final String COVERED_TABLE_CELL = "covered-table-cell"; + public static final String TABLE = "table"; + public static final String TABLE_COLUMN = "table-column"; + public static final String TABLE_COLUMNS = "table-columns"; + public static final String TABLE_HEADER_COLUMNS = "table-header-columns"; + public static final String TABLE_HEADER_ROWS = "table-header-rows"; + public static final String TABLE_ROWS = "table-rows"; + public static final String TABLE_ROW = "table-row"; + public static final String TABLE_CELL = "table-cell"; + public static final String P = "p"; + public static final String OBJECT_OLE = "object-ole"; + public static final String IMAGE = "image"; + public static final String IMAGE_DATA = "image-data"; + public static final String PRESERVE_IRI = "preserve-IRI"; + public static final String SCALE = "scale"; + public static final String NAME = "name"; + public static final String SHAPES = "shapes"; + public static final String ISOTROPIC = "isotropic"; + public static final String ANISOTROPIC = "anisotropic"; + public static final String NONE = "none"; +} diff --git a/reportbuilder/java/org/libreoffice/report/OutputRepository.java b/reportbuilder/java/org/libreoffice/report/OutputRepository.java new file mode 100644 index 000000000000..ae1653225401 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/OutputRepository.java @@ -0,0 +1,61 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * A repository for writing. Providing a repository always assumes, + * that more than one stream can be written. + * + */ +public interface OutputRepository +{ + + /** + * Creates an output stream for writing the data. If there is an entry with + * that name already contained in the repository, try to overwrite it. + * + * @param name + * the name of the output stream + * @param mimeType + * the mime type of the to-be-created output stream. Repository implementations which do not support + * associating a mime time with a stream might ignore this parameter. + * @return the outputstream + * @throws IOException if opening the stream fails + */ + OutputStream createOutputStream(final String name, final String mimeType) throws IOException; + + /** allows to acces sub repositories inside this repository + * + * @param name describes the path to the sub repository + * @param mimeType + * @return the sub repository + * @throws java.io.IOException when the sub repository doesn't exist. + */ + OutputRepository openOutputRepository(final String name, final String mimeType) throws IOException; + + boolean exists(final String name); + + boolean existsStorage(final String name); + + boolean isWritable(final String name); + + void closeOutputRepository(); +} diff --git a/reportbuilder/java/org/libreoffice/report/ParameterMap.java b/reportbuilder/java/org/libreoffice/report/ParameterMap.java new file mode 100644 index 000000000000..c1d8fae9a931 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ParameterMap.java @@ -0,0 +1,59 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +public interface ParameterMap +{ + + /** + * Adds a property to this properties collection. If a property with the given name + * exist, the property will be replaced with the new value. If the value is null, the + * property will be removed. + * + * @param key the property key. + * @param value the property value. + */ + public void put(final String key, final Object value); + + /** + * Retrieves the value stored for a key in this properties collection. + * + * @param key the property key. + * @return The stored value, or null if the key does not exist in this + * collection. + */ + Object get(final String key); + + /** + * Retrieves the value stored for a key in this properties collection, and returning the + * default value if the key was not stored in this properties collection. + * + * @param key the property key. + * @param defaultValue the default value to be returned when the key is not stored in + * this properties collection. + * @return The stored value, or the default value if the key does not exist in this + * collection. + */ + Object get(final String key, final Object defaultValue); + + String[] keys(); + + void clear(); + + int size(); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportAddIn.java b/reportbuilder/java/org/libreoffice/report/ReportAddIn.java new file mode 100644 index 000000000000..60c15b80d5a1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportAddIn.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * A report add-in defines a set of expressions, which can + * be used in the reporting. + * + * Each expression must provide meta-data to support GUI implementors. + * Expressions are assumed to be statefull, if they are not, they are + * free to be implemented as stateless expression. + */ +public interface ReportAddIn +{ + + int getExpressionCount(); + + ReportExpression createExpression(int expression); + + ReportExpressionMetaData getMetaData(int expression); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportEngineMetaData.java b/reportbuilder/java/org/libreoffice/report/ReportEngineMetaData.java new file mode 100644 index 000000000000..00331779e0d1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportEngineMetaData.java @@ -0,0 +1,50 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +public interface ReportEngineMetaData +{ + + /** + * Checks, whether a certain output type is available. + * Feed the mime-type of the output type in and you'll get + * a true or false back. + * + * @param mimeType + * @return true, if the output type is supported; false otherwise. + */ + boolean isOutputSupported(String mimeType); + + /** + * Lists all supported output parameters for the given mime-type. + * This listing can be used to build a generic user interface for + * configuring a certain output. + * + * @param mimeType + * @return + */ + String[] getOutputParameters(String mimeType); + + Class getParameterType(String parameter); + + boolean isMandatory(String parameter); + + boolean isEnumeration(String parameter); + + Object[] getEnumerationValues(String parameter); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportEngineParameterNames.java b/reportbuilder/java/org/libreoffice/report/ReportEngineParameterNames.java new file mode 100644 index 000000000000..8e6593ead7c7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportEngineParameterNames.java @@ -0,0 +1,46 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * Making this enumeration typesafe and fully defined here would + * be nice, wouldn't it? + */ +public class ReportEngineParameterNames +{ + + public static final String CONTENT_TYPE = "content-type"; + public static final String INPUT_NAME = "input.name"; + public static final String INPUT_REPOSITORY = "input.repository"; + public static final String OUTPUT_NAME = "output.name"; + public static final String OUTPUT_REPOSITORY = "output.repository"; + public static final String INPUT_DATASOURCE_FACTORY = "input.datasource-factory"; + public static final String IMAGE_SERVICE = "ImageService"; + public static final String INPUT_REPORTJOB_FACTORY = "input.reportjob-factory"; + public static final String INPUT_MASTER_COLUMNS = "input.master-columns"; + public static final String INPUT_MASTER_VALUES = "input.master-values"; + public static final String INPUT_DETAIL_COLUMNS = "input.detail-columns"; + public static final String MIMETYPE = "output.mimetype"; + public static final String AUTHOR = "Author"; + public static final String TITLE = "Title"; + public static final String MAXROWS = "MaxRows"; + + private ReportEngineParameterNames() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportExecutionException.java b/reportbuilder/java/org/libreoffice/report/ReportExecutionException.java new file mode 100644 index 000000000000..3d7334d683f7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportExecutionException.java @@ -0,0 +1,77 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +public class ReportExecutionException extends Exception +{ + + /** + * Constructs a new exception with null as its detail message. The cause is + * not initialized, and may subsequently be initialized by a call to {@link + * #initCause}. + */ + public ReportExecutionException() + { + } + + /** + * Constructs a new exception with the specified cause and a detail message of + * (cause==null ? null : cause.toString()) (which typically contains the class + * and detail message of cause). This constructor is useful for exceptions that + * are little more than wrappers for other throwables (for example, {@link + * java.security.PrivilegedActionException}). + * + * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} + * method). (A null value is permitted, and indicates that the + * cause is nonexistent or unknown.) + * @since 1.4 + */ + public ReportExecutionException(Throwable cause) + { + super(cause); + } + + /** + * Constructs a new exception with the specified detail message. The cause is not + * initialized, and may subsequently be initialized by a call to {@link #initCause}. + * + * @param message the detail message. The detail message is saved for later retrieval by + * the {@link #getMessage()} method. + */ + public ReportExecutionException(String message) + { + super(message); + } + + /** + * Constructs a new exception with the specified detail message and cause.

Note that + * the detail message associated with cause is not automatically + * incorporated in this exception's detail message. + * + * @param message the detail message (which is saved for later retrieval by the {@link + * #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the {@link + * #getCause()} method). (A null value is permitted, and + * indicates that the cause is nonexistent or unknown.) + * @since 1.4 + */ + public ReportExecutionException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportExpression.java b/reportbuilder/java/org/libreoffice/report/ReportExpression.java new file mode 100644 index 000000000000..d9fdeb2d4b64 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportExpression.java @@ -0,0 +1,42 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * Expressions are simple computation components. + * + * Expressions are always assumed to be immutable. They are not allowed to + * change their state and it is not guaranteed, in which order they get called. + * If the expression has been called before, the last computed value will be + * available from the datarow. + * + * This construct allows us to write expressions in the form + * "Sum := Sum + Column". + * + * Multiple calls to getValue on the same expression instance must return the + * same value (assuming that the datarow passed in is the same). + */ +public interface ReportExpression +{ + + void setParameters(Object[] parameters); + + Object getParameters(); + + Object getValue(DataRow row); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportExpressionMetaData.java b/reportbuilder/java/org/libreoffice/report/ReportExpressionMetaData.java new file mode 100644 index 000000000000..b4c359e5502c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportExpressionMetaData.java @@ -0,0 +1,38 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import java.util.Locale; + +public interface ReportExpressionMetaData +{ + + int getParameterCount(); + + String getParameterName(int param); + + String getParameterDisplayName(int param, Locale locale); + + String getParameterDescription(int param, Locale locale); + + String getName(); + + String getDisplayName(Locale l); + + String getDescription(Locale l); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportFunction.java b/reportbuilder/java/org/libreoffice/report/ReportFunction.java new file mode 100644 index 000000000000..668f11c241e6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportFunction.java @@ -0,0 +1,35 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * Functions are statefull computation components. + * + * Functions are allowed to have a state, but are considered + * immutable (the same is true for expressions). Functions are + * allowed to update their state on every call to 'advance', which + * signals, that the cursor has been moved. + * + * Functions have no way to 'reset' their state, if a reset is needed, + * the report engine is urged to query a new instance from the ReportAddin. + */ +public interface ReportFunction extends ReportExpression +{ + + public ReportFunction advance(DataRow row); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportJob.java b/reportbuilder/java/org/libreoffice/report/ReportJob.java new file mode 100644 index 000000000000..1bbcdec436ee --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportJob.java @@ -0,0 +1,81 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import java.io.IOException; + +/** + * This allows some simple job control. A job can be interrupted (or if it has + * not yet been started, canceled), and the job status can be queried (scheduled, + * running, finished). + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
JobStatusrunningfinished
Scheduledfalsefalse
Runningtruefalse
Finishedfalsetrue
+ * + */ +public interface ReportJob +{ + + /** + * Although we might want to run the job as soon as it has been + * created, sometimes it is wiser to let the user add some listeners + * first. If we execute at once, the user either has to deal with + * threading code or wont receive any progress information in single + * threaded environments. + * @throws java.io.IOException + * @throws ReportExecutionException + */ + void execute() + throws ReportExecutionException, IOException; + + /** + * Interrupt the job. + */ + void interrupt(); + + /** + * Queries the jobs execution status. + * + * @return true, if the job is currently running, false otherwise. + */ + boolean isRunning(); + + /** + * Queries the jobs result status. + * + * @return true, if the job is finished (or has been interrupted), false + * if the job waits for activation. + */ + boolean isFinished(); + + void addProgressIndicator(JobProgressIndicator indicator); + + void removeProgressIndicator(JobProgressIndicator indicator); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportJobDefinition.java b/reportbuilder/java/org/libreoffice/report/ReportJobDefinition.java new file mode 100644 index 000000000000..896d4026496f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportJobDefinition.java @@ -0,0 +1,47 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +/** + * The report job is created by the report job factory and holds all properties + * required to complete the reporting task. + * + */ +public interface ReportJobDefinition +{ + + /** + * The parameters of the root report definition. The report parameters are using + * by the query factory to parametrize the query statement. + * + * The query parameters for the subreports are defined using mappings, it would not + * make sense to define them here. + * + * @return a map containing the report parameters + */ + ParameterMap getQueryParameters(); + + /** + * The report processing parameters control the behaviour of the report. There are + * several mandatory parameters, some optional and possibly some not-yet-understood + * parameters. Use the engine meta data to find out, which parameters are supported. + * + * @return the processing parameters + */ + JobProperties getProcessingParameters(); +} diff --git a/reportbuilder/java/org/libreoffice/report/ReportJobFactory.java b/reportbuilder/java/org/libreoffice/report/ReportJobFactory.java new file mode 100644 index 000000000000..eeb16f6560dc --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/ReportJobFactory.java @@ -0,0 +1,28 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.beans.NamedValue; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.uno.Exception; + +public interface ReportJobFactory +{ + + ReportJob createReportJob(final NamedValue[] namedValue) throws IllegalArgumentException, ReportExecutionException, Exception; +} diff --git a/reportbuilder/java/org/libreoffice/report/SDBCReportData.java b/reportbuilder/java/org/libreoffice/report/SDBCReportData.java new file mode 100644 index 000000000000..6019d94c8cb6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/SDBCReportData.java @@ -0,0 +1,367 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameAccess; +import com.sun.star.lang.IndexOutOfBoundsException; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.sdb.XParametersSupplier; +import com.sun.star.sdbc.DataType; +import com.sun.star.sdbc.SQLException; +import com.sun.star.sdbc.XResultSetMetaData; +import com.sun.star.sdbc.XResultSetMetaDataSupplier; +import com.sun.star.sdbc.XRow; +import com.sun.star.sdbc.XRowSet; +import com.sun.star.sdbcx.XColumnsSupplier; +import com.sun.star.uno.Any; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.util.DateTime; +import com.sun.star.util.Time; + +import java.sql.Timestamp; + +public class SDBCReportData implements DataSource +{ + + private final XRowSet rowSet; + private final XRow row; + private int rowCount; + private XIndexAccess parameters; + private int firstParameterIndex = -1; + private int columnCount; + private final String[] columnNames; + private final int[] columnTypes; + + public SDBCReportData(final XRowSet rowSet) throws SQLException + { + row = (XRow) UnoRuntime.queryInterface(XRow.class, rowSet); + this.rowSet = rowSet; + + if (rowSet == null) + { + rowCount = 0; + columnCount = 0; + columnTypes = new int[1]; + columnNames = new String[1]; + } + else + { + final XParametersSupplier xSuppParams = (XParametersSupplier) UnoRuntime.queryInterface( + XParametersSupplier.class, rowSet); + if (xSuppParams != null) + { + parameters = xSuppParams.getParameters(); + } + + final XColumnsSupplier columnsSup = (XColumnsSupplier) UnoRuntime.queryInterface(XColumnsSupplier.class, rowSet); + final XNameAccess columns = columnsSup.getColumns(); + final String[] columnNamesList = columns.getElementNames(); + final XResultSetMetaDataSupplier sup = (XResultSetMetaDataSupplier) UnoRuntime.queryInterface(XResultSetMetaDataSupplier.class, rowSet); + final XResultSetMetaData resultSetMetaData = sup.getMetaData(); + + columnCount = resultSetMetaData.getColumnCount(); + firstParameterIndex = columnCount + 1; + if (parameters != null) + { + columnCount += parameters.getCount(); + } + + columnTypes = new int[columnCount]; + columnNames = new String[columnCount]; + + for (int i = 1; i <= columnCount; ++i) + { + if (i < firstParameterIndex) + { + columnNames[i - 1] = columnNamesList[i - 1];// resultSetMetaData.getColumnName(i); + columnTypes[i - 1] = resultSetMetaData.getColumnType(i); + } + else + { + try + { + final XPropertySet paramColumn = (XPropertySet) UnoRuntime.queryInterface( + XPropertySet.class, parameters.getByIndex(i - firstParameterIndex)); + columnNames[i - 1] = (String) paramColumn.getPropertyValue("Name"); + columnTypes[i - 1] = (Integer) paramColumn.getPropertyValue("Type"); + } + catch (Exception e) + { + columnNames[i - 1] = "Error"; + columnTypes[i - 1] = DataType.CHAR; + } + } + } + + if (rowSet.last()) + { + rowCount = rowSet.getRow(); + rowSet.beforeFirst(); + } + else + { + rowCount = 0; + } + } + } + + public int getColumnCount() throws DataSourceException + { + return columnCount; + } + + public int getRowCount() + { + return rowCount; + } + + public String getColumnName(final int column) throws DataSourceException + { + return columnNames[column - 1]; + } + + public boolean absolute(final int row) throws DataSourceException + { + if (rowSet == null) + { + return false; + } + try + { + if (row == 0) + { + rowSet.beforeFirst(); + return true; + } + return rowSet.absolute(row); + } + catch (SQLException e) + { + throw new DataSourceException(e.getMessage(), e); + } + } + + public boolean next() throws DataSourceException + { + if (rowSet == null) + { + return false; + } + try + { + return rowSet.next(); + } + catch (SQLException e) + { + throw new DataSourceException(e.getMessage(), e); + } + } + + public void close() throws DataSourceException + { + } + + static private java.sql.Date getDate(final Object obj) + { + final java.sql.Date date; + if (obj instanceof com.sun.star.util.Date) + { + final com.sun.star.util.Date unodate = (com.sun.star.util.Date) obj; + date = java.sql.Date.valueOf(getDateString(unodate.Year, unodate.Month, unodate.Day).toString()); + } + else + { + date = null; + } + return date; + } + + private static StringBuffer getTimeString(final int hours, final int minutes, final int seconds) + { + final StringBuffer timeString = new StringBuffer(); + if (hours < 10) + { + timeString.append('0'); + } + timeString.append(hours); + timeString.append(':'); + if (minutes < 10) + { + timeString.append('0'); + } + timeString.append(minutes); + timeString.append(':'); + if (seconds < 10) + { + timeString.append('0'); + } + timeString.append(seconds); + return timeString; + } + + static private StringBuffer getDateString(final int years, final int months, final int days) + { + final StringBuffer str = new StringBuffer(); + str.append(years); + final StringBuffer str2 = new StringBuffer("0000"); + str2.delete(0, str.length()); + str.insert(0, str2); + str.append('-'); + if (months < 10) + { + str.append('0'); + } + str.append(months); + str.append('-'); + if (days < 10) + { + str.append('0'); + } + str.append(days); + return str; + } + + static private java.sql.Time getTime(final Object obj) + { + final java.sql.Time time; + if (obj instanceof Time) + { + final Time unoTime = (Time) obj; + time = java.sql.Time.valueOf(getTimeString(unoTime.Hours, unoTime.Minutes, unoTime.Seconds).toString()); + } + else + { + time = null; + } + return time; + } + + static private Timestamp getTimestamp(final Object obj) + { + final Timestamp ts; + if (obj instanceof DateTime) + { + final DateTime unoTs = (DateTime) obj; + final StringBuffer str = getDateString(unoTs.Year, unoTs.Month, unoTs.Day); + str.append(' '); + str.append(getTimeString(unoTs.Hours, unoTs.Minutes, unoTs.Seconds)); + str.append('.'); + str.append(unoTs.HundredthSeconds); + ts = java.sql.Timestamp.valueOf(str.toString()); + } + else + { + ts = null; + } + return ts; + } + + public Object getObject(final int column) throws DataSourceException + { + if (rowSet == null) + { + return null; + } + try + { + final boolean isParameterValue = (parameters != null) && (column >= firstParameterIndex); + Object obj; + final boolean wasNull; + if (isParameterValue) + { + final XPropertySet paramCol = (XPropertySet) UnoRuntime.queryInterface( + XPropertySet.class, parameters.getByIndex(column - firstParameterIndex)); + obj = paramCol.getPropertyValue("Value"); + wasNull = obj == null; + } + else + { + obj = row.getObject(column, null); + wasNull = row.wasNull(); + } + + if (wasNull) + { + obj = null; + } + else + { + obj = convertObject(columnTypes[column - 1], obj); + } + return obj; + } + catch (SQLException ex) + { + throw new DataSourceException(ex.getMessage(), ex); + } + catch (UnknownPropertyException ex) + { + throw new DataSourceException(ex.getMessage(), ex); + } + catch (IndexOutOfBoundsException ex) + { + throw new DataSourceException(ex.getMessage(), ex); + } + catch (WrappedTargetException ex) + { + throw new DataSourceException(ex.getMessage(), ex); + } + } + + private Object convertObject(final int type, final Object obj) + { + Object ret; + switch (type) + { + case DataType.DATE: + ret = getDate(obj); + break; + case DataType.TIME: + ret = getTime(obj); + break; + case DataType.TIMESTAMP: + ret = getTimestamp(obj); + break; + case DataType.DECIMAL: + case DataType.NUMERIC: + if (!(obj instanceof Any)) + { + try + { + ret = new java.math.BigDecimal(String.valueOf(obj)); + } + catch (NumberFormatException ex) + { + ret = obj; + } + } + else + { + ret = obj; + } + break; + default: + ret = obj; + break; + } + return ret; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java b/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java new file mode 100644 index 000000000000..a22be04503cc --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java @@ -0,0 +1,581 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.beans.PropertyVetoException; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.NoSuchElementException; +import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameAccess; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.IndexOutOfBoundsException; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.lang.XComponent; +import com.sun.star.sdb.CommandType; +import com.sun.star.sdb.XCompletedExecution; +import com.sun.star.sdb.XParametersSupplier; +import com.sun.star.sdb.XQueriesSupplier; +import com.sun.star.sdb.XSingleSelectQueryComposer; +import com.sun.star.sdb.tools.XConnectionTools; +import com.sun.star.sdbc.SQLException; +import com.sun.star.sdbc.XConnection; +import com.sun.star.sdbc.XParameters; +import com.sun.star.sdbc.XRowSet; +import com.sun.star.task.XInteractionHandler; +import com.sun.star.uno.Exception; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +import java.lang.reflect.Method; + +import java.math.BigDecimal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + + +/** + * Very primitive implementation, just to show how this could be used ... + * + */ +public class SDBCReportDataFactory implements DataSourceFactory +{ + + private static final String ESCAPEPROCESSING = "EscapeProcessing"; + + private class RowSetProperties + { + + final Boolean escapeProcessing; + final int commandType; + final Integer maxRows; + final String command; + final String filter; + + public RowSetProperties(final Boolean escapeProcessing, final int commandType, final String command, final String filter, final Integer maxRows) + { + this.escapeProcessing = escapeProcessing; + this.commandType = commandType; + this.command = command; + this.filter = filter; + this.maxRows = maxRows; + } + + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + if (getClass() != obj.getClass()) + { + return false; + } + final RowSetProperties other = (RowSetProperties) obj; + if (this.escapeProcessing != other.escapeProcessing && (this.escapeProcessing == null || !this.escapeProcessing.equals(other.escapeProcessing))) + { + return false; + } + if (this.commandType != other.commandType) + { + return false; + } + if (this.maxRows != other.maxRows && (this.maxRows == null || !this.maxRows.equals(other.maxRows))) + { + return false; + } + if ((this.command == null) ? (other.command != null) : !this.command.equals(other.command)) + { + return false; + } + if ((this.filter == null) ? (other.filter != null) : !this.filter.equals(other.filter)) + { + return false; + } + return true; + } + + public int hashCode() + { + int hash = 3; + hash = 59 * hash + (this.escapeProcessing != null ? this.escapeProcessing.hashCode() : 0); + hash = 59 * hash + this.commandType; + hash = 59 * hash + (this.maxRows != null ? this.maxRows.hashCode() : 0); + hash = 59 * hash + (this.command != null ? this.command.hashCode() : 0); + hash = 59 * hash + (this.filter != null ? this.filter.hashCode() : 0); + return hash; + } + } + + class ParameterDefinition + { + int parameterCount = 0; + private ArrayList parameterIndex = new ArrayList(); + } + private static final Log LOGGER = LogFactory.getLog(SDBCReportDataFactory.class); + public static final String COMMAND_TYPE = "command-type"; + public static final String ESCAPE_PROCESSING = "escape-processing"; + public static final String GROUP_EXPRESSIONS = "group-expressions"; + public static final String MASTER_VALUES = "master-values"; + public static final String MASTER_COLUMNS = "master-columns"; + 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; + 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 final Map rowSetProperties = new HashMap(); + private final Map parameterMap = new HashMap(); + private boolean rowSetCreated = false; + + public SDBCReportDataFactory(final XComponentContext cmpCtx, final XConnection connection) + { + this.connection = connection; + m_cmpCtx = cmpCtx; + } + + public DataSource queryData(final String command, final Map parameters) throws DataSourceException + { + try + { + if (command == null) + { + return new SDBCReportData(null); + } + int commandType = CommandType.COMMAND; + final String commandTypeValue = (String) parameters.get(COMMAND_TYPE); + if (commandTypeValue != null) + { + if ("query".equals(commandTypeValue)) + { + commandType = CommandType.QUERY; + } + else if ("table".equals(commandTypeValue)) + { + commandType = CommandType.TABLE; + } + else + { + commandType = CommandType.COMMAND; + } + } + final Boolean escapeProcessing = (Boolean) parameters.get(ESCAPE_PROCESSING); + final String filter = (String) parameters.get(UNO_FILTER); + final Integer maxRows = (Integer) parameters.get("MaxRows"); + final RowSetProperties rowSetProps = new RowSetProperties(escapeProcessing, commandType, command, filter, maxRows); + + final Object[] p = createRowSet(rowSetProps, parameters); + final XRowSet rowSet = (XRowSet) p[0]; + + if (command.length() != 0) + { + final ParameterDefinition paramDef = (ParameterDefinition) p[1]; + fillParameter(parameters, rowSet, paramDef); + rowSetCreated = rowSetCreated && (maxRows == null || maxRows == 0); + + final XCompletedExecution execute = (XCompletedExecution) UnoRuntime.queryInterface(XCompletedExecution.class, rowSet); + if (rowSetCreated && execute != null && paramDef.parameterCount > 0) + { + final XInteractionHandler handler = (XInteractionHandler) UnoRuntime.queryInterface(XInteractionHandler.class, m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.sdb.InteractionHandler", m_cmpCtx)); + execute.executeWithCompletion(handler); + } + else + { + rowSet.execute(); + } + } + + rowSetCreated = false; + return new SDBCReportData(rowSet); + } + catch (Exception ex) + { + rowSetCreated = false; + throw new DataSourceException(ex.getMessage(), ex); + } + } + + private String getOrderStatement(final int commandType, final String command, final List groupExpressions) + { + final StringBuffer order = new StringBuffer(); + final int count = groupExpressions.size(); + if (count != 0) + { + try + { + final String quote = connection.getMetaData().getIdentifierQuoteString(); + final XComponent[] hold = new XComponent[1]; + final XNameAccess columns = getFieldsByCommandDescriptor(commandType, command, hold); + if (columns != null) + { + for (int i = 0; i < count; i++) + { + final Object[] pair = (Object[]) groupExpressions.get(i); + String expression = (String) pair[0]; + + if (!expression.startsWith(quote) && columns.hasByName(expression)) + { + XPropertySet column; + try + { + column = UnoRuntime.queryInterface(XPropertySet.class, columns.getByName(expression)); + expression = quote + column.getPropertyValue("TableName") + quote + "." + quote + expression + quote; + } + catch (Exception ex) + { + Logger.getLogger(SDBCReportDataFactory.class.getName()).log(Level.SEVERE, null, ex); + expression = quote + expression + quote; + } + } + expression = expression.trim(); // Trim away white spaces + + if (expression.length() > 0) + { + order.append(expression); + if (order.length() > 0) + { + order.append(' '); + } + final String sorting = (String) pair[1]; + if (sorting == null || sorting.equals(OfficeToken.FALSE)) + { + order.append("DESC"); + } + if ((i + 1) < count) + { + order.append(", "); + } + } + } + } + } + catch (SQLException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } + } + return order.toString(); + } + + private XNameAccess getFieldsByCommandDescriptor(final int commandType, final String command, final XComponent[] out) throws SQLException + { + final Class[] parameter = new Class[3]; + parameter[0] = int.class; + parameter[1] = String.class; + parameter[2] = out.getClass(); + final XConnectionTools tools = (XConnectionTools) UnoRuntime.queryInterface(XConnectionTools.class, connection); + try + { + tools.getClass().getMethod("getFieldsByCommandDescriptor", parameter); + return tools.getFieldsByCommandDescriptor(commandType, command, out); + } + catch (NoSuchMethodException ex) + { + } + + throw new SQLException(); + } + + private XSingleSelectQueryComposer getComposer(final XConnectionTools tools, + final String command, + final int commandType) + { + final Class[] parameter = new Class[2]; + parameter[0] = int.class; + parameter[1] = String.class; + try + { + final Object[] param = new Object[2]; + param[0] = commandType; + param[1] = command; + final Method call = tools.getClass().getMethod("getComposer", parameter); + return (XSingleSelectQueryComposer) call.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 + } + + return null; + } + + private void fillParameter(final Map parameters, + final XRowSet rowSet, final ParameterDefinition paramDef) + throws SQLException, + UnknownPropertyException, + PropertyVetoException, + IllegalArgumentException, + WrappedTargetException + { + final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); + if (masterValues != null && !masterValues.isEmpty()) + { + final XParameters para = (XParameters) UnoRuntime.queryInterface(XParameters.class, rowSet); + + for (int i = 0; + i < masterValues.size(); + i++) + { + Object object = masterValues.get(i); + if (object instanceof BigDecimal) + { + object = ((BigDecimal) object).toString(); + } + final Integer pos = paramDef.parameterIndex.get(i); + para.setObject(pos + 1, object); + } + } + } + + private final Object[] createRowSet(final RowSetProperties rowSetProps, final Map parameters) + throws Exception + { + final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); + if (rowSetProperties.containsKey(rowSetProps) && detailColumns != null && !detailColumns.isEmpty()) + { + return new Object[] + { + rowSetProperties.get(rowSetProps), parameterMap.get(rowSetProps) + }; + } + + rowSetCreated = true; + 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); + + rowSetProp.setPropertyValue("ActiveConnection", connection); + rowSetProp.setPropertyValue(ESCAPEPROCESSING, rowSetProps.escapeProcessing); + rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(rowSetProps.commandType)); + rowSetProp.setPropertyValue(UNO_COMMAND, rowSetProps.command); + + if (rowSetProps.filter != null) + { + rowSetProp.setPropertyValue("Filter", rowSetProps.filter); + rowSetProp.setPropertyValue(APPLY_FILTER, Boolean.valueOf(rowSetProps.filter.length() != 0)); + } + else + { + rowSetProp.setPropertyValue(APPLY_FILTER, Boolean.FALSE); + } + + if (rowSetProps.maxRows != null) + { + rowSetProp.setPropertyValue("MaxRows", rowSetProps.maxRows); + } + + final XConnectionTools tools = (XConnectionTools) UnoRuntime.queryInterface(XConnectionTools.class, connection); + fillOrderStatement(rowSetProps.command, rowSetProps.commandType, parameters, tools, rowSetProp); + final ParameterDefinition paramDef = createParameter(parameters, tools, rowSetProps, rowSet); + + rowSetProperties.put(rowSetProps, rowSet); + parameterMap.put(rowSetProps, paramDef); + + return new Object[] + { + rowSet, paramDef + }; + } + + private ParameterDefinition createParameter(final Map parameters, + final XConnectionTools tools, + RowSetProperties rowSetProps, final XRowSet rowSet) + throws SQLException, + UnknownPropertyException, + PropertyVetoException, + IllegalArgumentException, + WrappedTargetException + { + final ParameterDefinition paramDef = new ParameterDefinition(); + final XSingleSelectQueryComposer composer = getComposer(tools, rowSetProps.command, rowSetProps.commandType); + if (composer != null) + { + final XPropertySet rowSetProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); + if ((Boolean) rowSetProp.getPropertyValue(APPLY_FILTER)) + { + composer.setFilter((String) rowSetProp.getPropertyValue("Filter")); + } + // get old parameter count + final ArrayList detailColumns = (ArrayList) parameters.get(DETAIL_COLUMNS); + final ArrayList handledColumns = new ArrayList(); + final XParametersSupplier paraSup = (XParametersSupplier) UnoRuntime.queryInterface(XParametersSupplier.class, composer); + if (paraSup != null) + { + final XIndexAccess params = paraSup.getParameters(); + if (params != null) + { + final int oldParameterCount = params.getCount(); + paramDef.parameterCount = oldParameterCount; + if (detailColumns != null) + { + for (int i = 0; i < oldParameterCount; i++) + { + try + { + final XPropertySet parameter = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, params.getByIndex(i)); + if (parameter != null) + { + final String name = (String) parameter.getPropertyValue("Name"); + for (int j = 0; j < detailColumns.size(); j++) + { + if (name.equals(detailColumns.get(j))) + { + handledColumns.add(name); + paramDef.parameterIndex.add(i); + --paramDef.parameterCount; + break; + } + } + } + } + catch (IndexOutOfBoundsException ex) + { + Logger.getLogger(SDBCReportDataFactory.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + } + } + final ArrayList masterValues = (ArrayList) parameters.get(MASTER_VALUES); + if (masterValues != null && !masterValues.isEmpty() && paramDef.parameterIndex.size() != detailColumns.size()) + { + // Vector masterColumns = (Vector) parameters.get("master-columns"); + + // create the new filter + final String quote = connection.getMetaData().getIdentifierQuoteString(); + final StringBuffer oldFilter = new StringBuffer(); + oldFilter.append(composer.getFilter()); + if (oldFilter.length() != 0) + { + oldFilter.append(" AND "); + } + int newParamterCounter = 1; + for (final Iterator it = detailColumns.iterator(); it.hasNext(); + ++newParamterCounter) + { + final String detail = (String) it.next(); + if (!handledColumns.contains(detail)) + { + //String master = (String) masterIt.next(); + oldFilter.append(quote); + oldFilter.append(detail); + oldFilter.append(quote); + oldFilter.append(" = :link_"); + oldFilter.append(newParamterCounter); + if (it.hasNext()) + { + oldFilter.append(" AND "); + } + paramDef.parameterIndex.add(newParamterCounter + paramDef.parameterCount - 1); + } + } + + composer.setFilter(oldFilter.toString()); + + final String sQuery = composer.getQuery(); + rowSetProp.setPropertyValue(UNO_COMMAND, sQuery); + rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(CommandType.COMMAND)); + } + } + return paramDef; + } + + void fillOrderStatement(final String command, + final int commandType, final Map parameters, + final XConnectionTools tools, + final XPropertySet rowSetProp) + throws SQLException, + UnknownPropertyException, + PropertyVetoException, + IllegalArgumentException, + 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 = getComposer(tools, command, commandType); + 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(""); + 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 Boolean escape = (Boolean) prop.getPropertyValue(ESCAPEPROCESSING); + rowSetProp.setPropertyValue(ESCAPEPROCESSING, escape); + final String queryCommand = (String) prop.getPropertyValue(UNO_COMMAND); + statement = "SELECT * FROM (" + queryCommand + ") AS \"__LibreOffice_report_result\""; + } + + } + else + { + statement = "SELECT * FROM (" + command + ") AS \"__LibreOffice_report_result\""; + } + } + rowSetProp.setPropertyValue(UNO_COMMAND, statement); + rowSetProp.setPropertyValue(UNO_COMMAND_TYPE, Integer.valueOf(CommandType.COMMAND)); + } + rowSetProp.setPropertyValue("Order", order.toString()); + } +} + diff --git a/reportbuilder/java/org/libreoffice/report/SOImageService.java b/reportbuilder/java/org/libreoffice/report/SOImageService.java new file mode 100644 index 000000000000..7cc987145a6c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/SOImageService.java @@ -0,0 +1,177 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.awt.Size; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertySet; +import com.sun.star.beans.XPropertySetInfo; +import com.sun.star.graphic.XGraphicProvider; +import com.sun.star.io.IOException; +import com.sun.star.io.XInputStream; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lib.uno.adapter.ByteArrayToXInputStreamAdapter; +import com.sun.star.lib.uno.adapter.InputStreamToXInputStreamAdapter; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +import java.io.InputStream; + + +public class SOImageService implements ImageService +{ + + private final XGraphicProvider m_xGraphicProvider; + + /** + * Creates a new instance of SOImageService + * @param xCompContext + * @throws ReportExecutionException + */ + public SOImageService(final XComponentContext xCompContext) + throws ReportExecutionException, com.sun.star.uno.Exception + { + if (xCompContext == null) + { + throw new ReportExecutionException(); + } + + + final XMultiComponentFactory m_xMCF = xCompContext.getServiceManager(); + m_xGraphicProvider = (XGraphicProvider) UnoRuntime.queryInterface(XGraphicProvider.class, + m_xMCF.createInstanceWithContext("com.sun.star.graphic.GraphicProvider", xCompContext)); + + if (m_xGraphicProvider == null) + { + throw new ReportExecutionException("There is no graphic-provider available."); + } + } + + public Size getImageSize(final InputStream image) throws ReportExecutionException + { + return getImageSize(new InputStreamToXInputStreamAdapter(image)); + } + + private Size getImageSize(final XInputStream image) throws ReportExecutionException + { + final Size dim = new Size(); + try + { + final PropertyValue[] value = new PropertyValue[] + { + new PropertyValue() + }; + value[0].Name = "InputStream"; + value[0].Value = image; + + final XPropertySet xImage = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, + m_xGraphicProvider.queryGraphic(value)); + + if (xImage != null) + { + final XPropertySetInfo xInfo = xImage.getPropertySetInfo(); + if (xInfo.hasPropertyByName("Size100thMM")) + { + Size imageSize = (Size) xImage.getPropertyValue("Size100thMM"); + dim.Width = imageSize.Width; + dim.Height = imageSize.Height; + if (dim.Height == 0 && dim.Width == 0) + { + imageSize = (Size) xImage.getPropertyValue("SizePixel"); + final int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); + final double fac = 2540 / (double) dpi; + dim.Width = (int) (imageSize.Width * fac); + dim.Height = (int) (imageSize.Height * fac); + } + } + else if (xInfo.hasPropertyByName("SizePixel")) + { + final Size imageSize = (Size) xImage.getPropertyValue("SizePixel"); + final int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); + final double fac = 2540 / dpi; + dim.Width = (int) (imageSize.Width * fac); + dim.Height = (int) (imageSize.Height * fac); + } + } + } + catch (Exception ex) + { + throw new ReportExecutionException("Failed to query Image-Size", ex); + } + return dim; + } + + public Size getImageSize(final byte[] image) throws ReportExecutionException + { + return getImageSize(new ByteArrayToXInputStreamAdapter(image)); + } + + private String getMimeType(final XInputStream image) throws ReportExecutionException + { + try + { + final PropertyValue[] value = new PropertyValue[] + { + new PropertyValue() + }; + value[0].Name = "InputStream"; + value[0].Value = image; + + final XPropertySet xImage = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, + m_xGraphicProvider.queryGraphic(value)); + + if (xImage != null) + { + final XPropertySetInfo xInfo = xImage.getPropertySetInfo(); + if (xInfo.hasPropertyByName("MimeType")) + { + return (String) xImage.getPropertyValue("MimeType"); + } + } + } + catch (UnknownPropertyException ex) + { + throw new ReportExecutionException(); + } + catch (WrappedTargetException ex) + { + throw new ReportExecutionException(); + } + catch (com.sun.star.lang.IllegalArgumentException ex) + { + throw new ReportExecutionException(); + } + catch (IOException ex) + { + throw new ReportExecutionException(); + } + return null; + } + + public String getMimeType(final InputStream image) throws ReportExecutionException + { + return getMimeType(new InputStreamToXInputStreamAdapter(image)); + } + + public String getMimeType(final byte[] image) throws ReportExecutionException + { + return getMimeType(new ByteArrayToXInputStreamAdapter(image)); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/StorageRepository.java b/reportbuilder/java/org/libreoffice/report/StorageRepository.java new file mode 100644 index 000000000000..2feb9972b118 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/StorageRepository.java @@ -0,0 +1,343 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report; + +import com.sun.star.beans.PropertyVetoException; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.NoSuchElementException; +import com.sun.star.embed.ElementModes; +import com.sun.star.embed.InvalidStorageException; +import com.sun.star.embed.XStorage; +import com.sun.star.embed.XTransactedObject; +import com.sun.star.io.XStream; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter; +import com.sun.star.lib.uno.adapter.XOutputStreamToOutputStreamAdapter; +import com.sun.star.uno.UnoRuntime; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A directory holds all the contents here. + * + * + */ +public class StorageRepository implements InputRepository, OutputRepository +{ + + private static final Log LOGGER = LogFactory.getLog(SDBCReportDataFactory.class); + private static final String REPORT_PROCESSING_FAILED = "ReportProcessing failed"; + private XStorage input; + private XStorage output; + private final String rootURL; + + /** + * + * @param input + * @param output + * @param rootURL + * @throws java.io.IOException + */ + public StorageRepository(final XStorage input, final XStorage output, final String rootURL) + { + this.input = input; + this.output = output; + this.rootURL = rootURL; + + } + + public StorageRepository(final XStorage storage, final boolean isOutput, final String rootURL) + { + this.rootURL = rootURL; + if (isOutput) + { + this.output = storage; + } + else + { + this.input = storage; + } + } + + public InputStream createInputStream(final String name) throws IOException + { + if (input == null) + { + throw new IOException("input is NULL"); + } + try + { + final XStream xStream = (XStream) UnoRuntime.queryInterface(XStream.class, input.openStreamElement(name, ElementModes.READ)); + return new BufferedInputStream(new XInputStreamToInputStreamAdapter(xStream.getInputStream()), 102400); + } + catch (com.sun.star.uno.Exception e) + { + throw new IOException("createInputStream"); + } + } + + /** + * Creates an output stream for writing the data. If there is an entry with + * that name already contained in the repository, try to overwrite it. + * + * @param name + * @param mimeType + * @return the outputstream + * @throws IOException if opening the stream fails + */ + public OutputStream createOutputStream(final String name, final String mimeType) throws IOException + { + if (output == null) + { + throw new IOException("output is NULL"); + } + try + { + final XStream stream = output.openStreamElement(name, ElementModes.WRITE | ElementModes.TRUNCATE); + stream.getInputStream().closeInput(); + if (mimeType != null) + { + final XPropertySet prop = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, stream); + prop.setPropertyValue("MediaType", mimeType); + } + return new BufferedOutputStream(new XOutputStreamToOutputStreamAdapter(stream.getOutputStream()), 204800); + } + catch (com.sun.star.uno.Exception e) + { + throw new IOException("createOutputStream"); + } + } + + public boolean exists(final String name) + { + try + { + return output.isStreamElement(name); + } + catch (InvalidStorageException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (com.sun.star.lang.IllegalArgumentException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (NoSuchElementException e) + { + // We expect this exception, no need to log it. + } + return false; + } + + public boolean isWritable(final String name) + { + return true; + } + + public Object getId() + { + return "1"; + } + + public long getVersion(final String name) + { + return 1; + } + + public boolean isReadable(final String name) + { + try + { + if (input != null) + { + return input.isStreamElement(name); + } + } + catch (InvalidStorageException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (com.sun.star.lang.IllegalArgumentException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (NoSuchElementException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + return false; + } + + public InputRepository openInputRepository(final String name) throws IOException + { + try + { + final String temp = shortenName(name); + if (!input.isStorageElement(temp)) + { + throw new IOException(); + } + final XStorage storage = (XStorage) UnoRuntime.queryInterface(XStorage.class, input.openStorageElement(temp, ElementModes.READ)); + return new StorageRepository(storage, false, rootURL); + } + catch (NoSuchElementException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (WrappedTargetException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (InvalidStorageException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (IllegalArgumentException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (com.sun.star.io.IOException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + throw new IOException(); + } + + final String shortenName(final String name) + { + final String temp; + if (name.startsWith("./")) + { + temp = name.substring(2); + } + else + { + temp = name; + } + return temp; + } + + public OutputRepository openOutputRepository(final String name, final String mimeType) throws IOException + { + try + { + final String temp = shortenName(name); + final XStorage storage = (XStorage) UnoRuntime.queryInterface(XStorage.class, output.openStorageElement(temp, ElementModes.WRITE)); + if (mimeType != null) + { + final XPropertySet prop = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, storage); + prop.setPropertyValue("MediaType", mimeType); + } + return new StorageRepository(storage, true, rootURL); + } + catch (UnknownPropertyException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (PropertyVetoException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (IllegalArgumentException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (WrappedTargetException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (InvalidStorageException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (com.sun.star.io.IOException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + + throw new IOException(); + } + + public void closeInputRepository() + { + if (input != null) + { + input.dispose(); + } + } + + public void closeOutputRepository() + { + if (output != null) + { + try + { + final XTransactedObject obj = (XTransactedObject) UnoRuntime.queryInterface(XTransactedObject.class, output); + if (obj != null) + { + obj.commit(); + } + } + catch (com.sun.star.io.IOException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (WrappedTargetException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + output.dispose(); + } + + } + + public boolean existsStorage(final String name) + { + try + { + return output.isStorageElement(name); + } + catch (InvalidStorageException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (com.sun.star.lang.IllegalArgumentException ex) + { + LOGGER.error(REPORT_PROCESSING_FAILED, ex); + } + catch (NoSuchElementException ex) + { + // We expect this exception, no need to log it. + } + return false; + } + + public String getRootURL() + { + return rootURL; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function.properties new file mode 100644 index 000000000000..a05ce8dad886 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=AUTHOR +description=Returns the author of the report. diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function_en_US.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function_en_US.properties new file mode 100644 index 000000000000..a05ce8dad886 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/Author-Function_en_US.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=AUTHOR +description=Returns the author of the report. diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunction.java b/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunction.java new file mode 100644 index 000000000000..dcd30e5f056b --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunction.java @@ -0,0 +1,48 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.function.metadata; + +import org.libreoffice.report.ReportEngineParameterNames; + +import org.pentaho.reporting.libraries.formula.EvaluationException; +import org.pentaho.reporting.libraries.formula.FormulaContext; +import org.pentaho.reporting.libraries.formula.LibFormulaErrorValue; +import org.pentaho.reporting.libraries.formula.function.Function; +import org.pentaho.reporting.libraries.formula.function.ParameterCallback; +import org.pentaho.reporting.libraries.formula.lvalues.TypeValuePair; +import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; + +public class AuthorFunction implements Function +{ + + public String getCanonicalName() + { + return "AUTHOR"; + } + + public TypeValuePair evaluate(final FormulaContext context, final ParameterCallback parameters) + throws EvaluationException + { + if (parameters.getParameterCount() != 0) + { + throw new EvaluationException(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE); + } + + return new TypeValuePair(TextType.TYPE, context.getConfiguration().getConfigProperty(ReportEngineParameterNames.AUTHOR)); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunctionDescription.java b/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunctionDescription.java new file mode 100644 index 000000000000..b4cf6e22fce7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/AuthorFunctionDescription.java @@ -0,0 +1,57 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.function.metadata; + +import org.pentaho.reporting.libraries.formula.function.AbstractFunctionDescription; +import org.pentaho.reporting.libraries.formula.function.FunctionCategory; +import org.pentaho.reporting.libraries.formula.typing.Type; +import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; + +public class AuthorFunctionDescription extends AbstractFunctionDescription +{ + + public AuthorFunctionDescription() + { + super("AUTHOR", "org.libreoffice.report.function.metadata.Author-Function"); + } + + public FunctionCategory getCategory() + { + return MetaDataFunctionCategory.CATEGORY; + } + + public int getParameterCount() + { + return 0; + } + + public Type getParameterType(final int position) + { + return null; + } + + public Type getValueType() + { + return TextType.TYPE; + } + + public boolean isParameterMandatory(final int position) + { + return false; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/MetaDataFunctionCategory.java b/reportbuilder/java/org/libreoffice/report/function/metadata/MetaDataFunctionCategory.java new file mode 100644 index 000000000000..3b6ac8a29413 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/MetaDataFunctionCategory.java @@ -0,0 +1,33 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.function.metadata; + +import org.pentaho.reporting.libraries.formula.function.AbstractFunctionCategory; +import org.pentaho.reporting.libraries.formula.function.FunctionCategory; + +public class MetaDataFunctionCategory extends AbstractFunctionCategory +{ + + public static final FunctionCategory CATEGORY = new MetaDataFunctionCategory(); + + private MetaDataFunctionCategory() + { + super("org.libreoffice.report.function.metadata.category"); + } +} + diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function.properties new file mode 100644 index 000000000000..3c0039f6c105 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=TITLE +description=Returns the title of the report. diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function_en_US.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function_en_US.properties new file mode 100644 index 000000000000..3c0039f6c105 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/Title-Function_en_US.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=TITLE +description=Returns the title of the report. diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunction.java b/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunction.java new file mode 100644 index 000000000000..fdc7ed0ebc30 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunction.java @@ -0,0 +1,52 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.function.metadata; + +import org.libreoffice.report.ReportEngineParameterNames; + +import org.pentaho.reporting.libraries.formula.EvaluationException; +import org.pentaho.reporting.libraries.formula.FormulaContext; +import org.pentaho.reporting.libraries.formula.LibFormulaErrorValue; +import org.pentaho.reporting.libraries.formula.function.Function; +import org.pentaho.reporting.libraries.formula.function.ParameterCallback; +import org.pentaho.reporting.libraries.formula.lvalues.TypeValuePair; +import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; + +public class TitleFunction implements Function +{ + + public TitleFunction() + { + } + + public String getCanonicalName() + { + return "TITLE"; + } + + public TypeValuePair evaluate(final FormulaContext context, final ParameterCallback parameters) + throws EvaluationException + { + if (parameters.getParameterCount() != 0) + { + throw new EvaluationException(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE); + } + + return new TypeValuePair(TextType.TYPE, context.getConfiguration().getConfigProperty(ReportEngineParameterNames.TITLE)); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunctionDescription.java b/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunctionDescription.java new file mode 100644 index 000000000000..30d3d337b510 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/TitleFunctionDescription.java @@ -0,0 +1,57 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.function.metadata; + +import org.pentaho.reporting.libraries.formula.function.AbstractFunctionDescription; +import org.pentaho.reporting.libraries.formula.function.FunctionCategory; +import org.pentaho.reporting.libraries.formula.typing.Type; +import org.pentaho.reporting.libraries.formula.typing.coretypes.TextType; + +public class TitleFunctionDescription extends AbstractFunctionDescription +{ + + public TitleFunctionDescription() + { + super("TITLE", "org.libreoffice.report.function.metadata.Title-Function"); + } + + public FunctionCategory getCategory() + { + return MetaDataFunctionCategory.CATEGORY; + } + + public int getParameterCount() + { + return 0; + } + + public Type getParameterType(final int position) + { + return null; + } + + public Type getValueType() + { + return TextType.TYPE; + } + + public boolean isParameterMandatory(final int position) + { + return false; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/category.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/category.properties new file mode 100644 index 000000000000..39f24f271d1e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/category.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=Document Information +description=Contains functions to access document information. diff --git a/reportbuilder/java/org/libreoffice/report/function/metadata/category_en_US.properties b/reportbuilder/java/org/libreoffice/report/function/metadata/category_en_US.properties new file mode 100644 index 000000000000..76ea0bb4d77f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/function/metadata/category_en_US.properties @@ -0,0 +1,21 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +display-name=MetaData +description=Contains functions about meta data diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/DefaultNameGenerator.java b/reportbuilder/java/org/libreoffice/report/pentaho/DefaultNameGenerator.java new file mode 100644 index 000000000000..ca69be4b63a6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/DefaultNameGenerator.java @@ -0,0 +1,147 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.OutputRepository; + +import java.io.IOException; + + +public class DefaultNameGenerator +{ + + private final OutputRepository outputRepository; + + public DefaultNameGenerator(final OutputRepository outputRepository) + { + if (outputRepository == null) + { + throw new NullPointerException(); + } + this.outputRepository = outputRepository; + } + + public String generateName(final String namePrefix, final String mimeType) + throws IOException + { + return generateName(namePrefix, mimeType, true); + } + + public String generateStorageName(final String namePrefix, final String mimeType) + throws IOException + { + return generateName(namePrefix, mimeType, false); + } + + /** + * Generates a new, unique name for storing resources in the output repository. Assuming that proper synchronization + * has been applied, the generated name will be unique within that repository. + * + * @param namePrefix a user defined name for that resource. + * @param mimeType the mime type of the resource to be stored in the repository. + * @param isStream + * @return the generated, fully qualified name. + * @throws java.io.IOException + */ + private String generateName(final String namePrefix, final String mimeType, final boolean isStream) + throws IOException + { + final String name; + if (namePrefix != null) + { + name = namePrefix; + } + else + { + name = "file"; + } + + StringBuffer firstFileName = new StringBuffer(); + firstFileName.append(name); + final String suffix; + if (mimeType != null) + { + suffix = getSuffixForType(mimeType); + firstFileName.append('.'); + firstFileName.append(suffix); + } + else + { + suffix = null; + } + String newName = firstFileName.toString(); + boolean exists; + if (isStream) + { + exists = outputRepository.exists(newName); + } + else + { + exists = outputRepository.existsStorage(newName); + } + if (exists) + { + int counter = 0; + while (exists) + { + if (counter < 0) // wraparound should not happen.. + { + throw new IOException(); + } + firstFileName.delete(0, firstFileName.length()); + firstFileName.append(name); + firstFileName.append(counter); + if (suffix != null) + { + firstFileName.append('.'); + firstFileName.append(suffix); + } + newName = firstFileName.toString(); + if (isStream) + { + exists = outputRepository.exists(newName); + } + else + { + exists = outputRepository.existsStorage(newName); + } + counter++; + } + } + return newName; + } + + protected String getSuffixForType(final String mimeType) + { + if ("image/png".equals(mimeType)) + { + return "png"; + } + if ("image/jpeg".equals(mimeType)) + { + return "jpg"; + } + if ("image/gif".equals(mimeType)) + { + return "gif"; + } + + // todo ... use a flexible mapping ... + return "dat"; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/Manifest.mf b/reportbuilder/java/org/libreoffice/report/pentaho/Manifest.mf new file mode 100644 index 000000000000..f98127d5b403 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/Manifest.mf @@ -0,0 +1,7 @@ +RegistrationClassName: org.libreoffice.report.pentaho.SOReportJobFactory +Class-Path: reportbuilderwizard.jar + flute-1.1.6.jar libserializer-1.1.6.jar libbase-1.1.6.jar + libfonts-1.1.6.jar libformula-1.1.7.jar liblayout-0.2.10.jar + libloader-1.1.6.jar librepository-1.1.6.jar libxml-1.1.7.jar + flow-engine-0.9.4.jar sac.jar commons-logging-1.1.1.jar +UNO-Type-Path: diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/OfficeNamespaces.java b/reportbuilder/java/org/libreoffice/report/pentaho/OfficeNamespaces.java new file mode 100644 index 000000000000..1a45f1f4347a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/OfficeNamespaces.java @@ -0,0 +1,62 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +/** + * Creation-Date: Feb 22, 2007, 1:53:29 PM + * + */ +public class OfficeNamespaces +{ + + public static final String OFFICE_NS = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; + public static final String TABLE_NS = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; + public static final String TEXT_NS = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; + public static final String STYLE_NS = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"; + public static final String DRAWING_NS = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; + public static final String FO_NS = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"; + public static final String XLINK_NS = "http://www.w3.org/1999/xlink"; + public static final String PURL_NS = "http://purl.org/dc/elements/1.1/"; + public static final String META_NS = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"; + public static final String DATASTYLE_NS = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"; + public static final String SVG_NS = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; + public static final String CHART_NS = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"; + public static final String CHARTOOO_NS = "http://openoffice.org/2010/chart"; + public static final String DR3D_NS = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"; + public static final String MATHML_NS = "http://www.w3.org/1998/Math/MathML"; + public static final String FORM_NS = "urn:oasis:names:tc:opendocument:xmlns:form:1.0"; + public static final String SCRIPT_NS = "urn:oasis:names:tc:opendocument:xmlns:script:1.0"; + public static final String OO2004_NS = "http://openoffice.org/2004/office"; + public static final String OOW2004_NS = "http://openoffice.org/2004/writer"; + public static final String OOC2004_NS = "http://openoffice.org/2004/calc"; + public static final String XML_EVENT_NS = "http://www.w3.org/2001/xml-events"; + public static final String XFORMS_NS = "http://www.w3.org/2002/xforms"; + public static final String XSD_NS = "http://www.w3.org/2001/XMLSchema"; + public static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance"; + public static final String OOREPORT_NS = "http://openoffice.org/2005/report"; + public static final String GRDDL_NS = "http://www.w3.org/2003/g/data-view#"; + public static final String CONFIG = "urn:oasis:names:tc:opendocument:xmlns:config:1.0"; + /** + * @deprecated + */ + public static final String NUMBER_NS = DATASTYLE_NS; + + private OfficeNamespaces() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/PentahoFormulaContext.java b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoFormulaContext.java new file mode 100644 index 000000000000..ced17741c9d1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoFormulaContext.java @@ -0,0 +1,84 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.pentaho.reporting.libraries.base.config.Configuration; +import org.pentaho.reporting.libraries.formula.ContextEvaluationException; +import org.pentaho.reporting.libraries.formula.FormulaContext; +import org.pentaho.reporting.libraries.formula.LocalizationContext; +import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; +import org.pentaho.reporting.libraries.formula.operators.OperatorFactory; +import org.pentaho.reporting.libraries.formula.typing.Type; +import org.pentaho.reporting.libraries.formula.typing.TypeRegistry; + +public class PentahoFormulaContext implements FormulaContext +{ + + final private FormulaContext backend; + final private Configuration config; + + public PentahoFormulaContext(final FormulaContext backend, final Configuration _config) + { + this.backend = backend; + config = _config; + } + + public LocalizationContext getLocalizationContext() + { + return backend.getLocalizationContext(); + } + + public Configuration getConfiguration() + { + return config; + } + + public FunctionRegistry getFunctionRegistry() + { + return backend.getFunctionRegistry(); + } + + public TypeRegistry getTypeRegistry() + { + return backend.getTypeRegistry(); + } + + public OperatorFactory getOperatorFactory() + { + return backend.getOperatorFactory(); + } + + public Type resolveReferenceType(final Object name) throws ContextEvaluationException + { + return backend.resolveReferenceType(name); + } + + public Object resolveReference(final Object name) throws ContextEvaluationException + { + if (name == null) + { + throw new NullPointerException(); + } + return backend.resolveReference(name); + } + + public boolean isReferenceDirty(final Object name) throws ContextEvaluationException + { + return backend.isReferenceDirty(name); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportAddIn.java b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportAddIn.java new file mode 100644 index 000000000000..bbd915c87222 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportAddIn.java @@ -0,0 +1,51 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.ReportAddIn; +import org.libreoffice.report.ReportExpression; +import org.libreoffice.report.ReportExpressionMetaData; +import org.libreoffice.report.pentaho.expressions.SumExpression; + +/** + * This class is a dummy implementation. Ignore it for now, we may extend this + * one later. + */ +public class PentahoReportAddIn implements ReportAddIn +{ + + public PentahoReportAddIn() + { + } + + public ReportExpression createExpression(final int expression) + { + return (expression == 0) ? new SumExpression() : null; + } + + public int getExpressionCount() + { + return 1; + } + + public ReportExpressionMetaData getMetaData(final int expression) + { + // todo implement me + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngine.java b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngine.java new file mode 100644 index 000000000000..8e30adc77fdf --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngine.java @@ -0,0 +1,61 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.JobDefinitionException; +import org.libreoffice.report.ReportEngineMetaData; +import org.libreoffice.report.ReportJob; +import org.libreoffice.report.ReportJobDefinition; +import org.libreoffice.report.util.DefaultReportJobDefinition; +import org.jfree.report.JFreeReportBoot; + +public class PentahoReportEngine +{ + + private final ReportEngineMetaData metaData; + + public PentahoReportEngine() + { + JFreeReportBoot.getInstance().start(); + this.metaData = new PentahoReportEngineMetaData(); + } + + public ReportEngineMetaData getMetaData() + { + return metaData; + } + + public ReportJobDefinition createJobDefinition() + { + return new DefaultReportJobDefinition(metaData); + } + + /** + * Open points: How to define scheduling? + * + * @return the report job definition for the job description. + * + * @throws org.libreoffice.report.JobDefinitionException + * + */ + public ReportJob createJob(final ReportJobDefinition definition) + throws JobDefinitionException + { + return new PentahoReportJob(definition); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngineMetaData.java b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngineMetaData.java new file mode 100644 index 000000000000..337eaa68d114 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportEngineMetaData.java @@ -0,0 +1,138 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ReportEngineMetaData; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.ReportJobFactory; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.pentaho.reporting.libraries.base.util.HashNMap; + + +public class PentahoReportEngineMetaData + implements ReportEngineMetaData +{ + + public static final String OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text"; + public static final String OPENDOCUMENT_SPREADSHEET = "application/vnd.oasis.opendocument.spreadsheet"; + public static final String OPENDOCUMENT_CHART = "application/vnd.oasis.opendocument.chart"; + public final static String CONTENT_TYPE = "content-type"; + public static final String DEBUG = "raw/text+xml"; + private final Set mandatoryParameters; + private final Map> parameterTypes; + private final HashNMap enumerationValues; + + public PentahoReportEngineMetaData() + { + mandatoryParameters = new HashSet(); + mandatoryParameters.add(ReportEngineParameterNames.CONTENT_TYPE); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_NAME); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_REPOSITORY); + mandatoryParameters.add(ReportEngineParameterNames.OUTPUT_NAME); + mandatoryParameters.add(ReportEngineParameterNames.OUTPUT_REPOSITORY); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); + mandatoryParameters.add(ReportEngineParameterNames.IMAGE_SERVICE); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_MASTER_COLUMNS); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_MASTER_VALUES); + mandatoryParameters.add(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS); + mandatoryParameters.add(ReportEngineParameterNames.AUTHOR); + mandatoryParameters.add(ReportEngineParameterNames.TITLE); + mandatoryParameters.add(ReportEngineParameterNames.MAXROWS); + + + parameterTypes = new HashMap>(); + parameterTypes.put(ReportEngineParameterNames.CONTENT_TYPE, String.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_NAME, String.class); + parameterTypes.put(ReportEngineParameterNames.OUTPUT_NAME, String.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_REPOSITORY, InputRepository.class); + parameterTypes.put(ReportEngineParameterNames.OUTPUT_REPOSITORY, OutputRepository.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, DataSourceFactory.class); + parameterTypes.put(ReportEngineParameterNames.IMAGE_SERVICE, ImageService.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY, ReportJobFactory.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_MASTER_COLUMNS, List.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_MASTER_VALUES, List.class); + parameterTypes.put(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS, List.class); + parameterTypes.put(ReportEngineParameterNames.AUTHOR, String.class); + parameterTypes.put(ReportEngineParameterNames.TITLE, String.class); + parameterTypes.put(ReportEngineParameterNames.MAXROWS, Integer.class); + + enumerationValues = new HashNMap(); + enumerationValues.add(CONTENT_TYPE, + PentahoReportEngineMetaData.OPENDOCUMENT_TEXT); + enumerationValues.add(CONTENT_TYPE, + PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET); + enumerationValues.add(CONTENT_TYPE, + PentahoReportEngineMetaData.OPENDOCUMENT_CHART); + enumerationValues.add(CONTENT_TYPE, PentahoReportEngineMetaData.DEBUG); + } + + public Object[] getEnumerationValues(final String parameter) + { + return enumerationValues.toArray(parameter); + } + + public Class getParameterType(final String parameter) + { + return parameterTypes.get(parameter); + } + + public boolean isEnumeration(final String parameter) + { + return enumerationValues.containsKey(parameter); + } + + /** + * Checks, whether a certain output type is available. Feed the mime-type of the output + * type in and you'll get a true or false back. + * + * @param mimeType + * @return true, if the output type is supported; false otherwise. + */ + public boolean isOutputSupported(final String mimeType) + { + return enumerationValues.containsValue(CONTENT_TYPE, mimeType.toLowerCase()); + } + + /** + * Lists all supported output parameters for the given mime-type. This listing can be + * used to build a generic user interface for configuring a certain output. + * + * @param mimeType + * @return + */ + public String[] getOutputParameters(final String mimeType) + { + return new String[0]; + } + + public boolean isMandatory(final String parameter) + { + return mandatoryParameters.contains(parameter); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportJob.java b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportJob.java new file mode 100644 index 000000000000..e1cf4f3900e9 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/PentahoReportJob.java @@ -0,0 +1,410 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.JobDefinitionException; +import org.libreoffice.report.JobProgressIndicator; +import org.libreoffice.report.JobProperties; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ParameterMap; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.ReportExecutionException; +import org.libreoffice.report.ReportJob; +import org.libreoffice.report.ReportJobDefinition; +import org.libreoffice.report.SDBCReportDataFactory; +import org.libreoffice.report.pentaho.loader.InputRepositoryLoader; +import org.libreoffice.report.pentaho.model.OfficeDetailSection; +import org.libreoffice.report.pentaho.model.OfficeDocument; +import org.libreoffice.report.pentaho.model.OfficeGroup; +import org.libreoffice.report.pentaho.model.OfficeReport; +import org.libreoffice.report.pentaho.output.chart.ChartRawReportProcessor; +import org.libreoffice.report.pentaho.output.spreadsheet.SpreadsheetRawReportProcessor; +import org.libreoffice.report.pentaho.output.text.TextRawReportProcessor; + +import java.io.IOException; + +import java.lang.Integer; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.report.expressions.Expression; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.DefaultReportJob; +import org.jfree.report.flow.ReportProcessor; +import org.jfree.report.flow.raw.XmlPrintReportProcessor; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; +import org.jfree.report.util.ReportParameters; + +import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; +import org.pentaho.reporting.libraries.formula.lvalues.FormulaFunction; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; +import org.pentaho.reporting.libraries.formula.lvalues.Term; +import org.pentaho.reporting.libraries.formula.parser.FormulaParser; +import org.pentaho.reporting.libraries.formula.parser.ParseException; +import org.pentaho.reporting.libraries.resourceloader.Resource; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + + +/** + * ToDo: Allow interrupting of jobs and report the report progress + */ +public class PentahoReportJob implements ReportJob +{ + + private static final Log LOGGER = LogFactory.getLog(PentahoReportJob.class); + private boolean finished; + private final List listeners; + private final DataSourceFactory dataSourceFactory; + private final OutputRepository outputRepository; + private final JobProperties jobProperties; + private OfficeDocument report; + private final ResourceManager resourceManager; + private final String outputName; + private final ImageService imageService; + private final InputRepository inputRepository; + private final ReportJobDefinition definition; + private final List masterValues; + private final List detailColumns; + + public ReportJobDefinition getDefinition() + { + return definition; + } + + public PentahoReportJob(final ReportJobDefinition definition) + throws JobDefinitionException + { + if (definition == null) + { + throw new NullPointerException(); + } + + this.definition = definition; + this.listeners = new ArrayList(); + this.jobProperties = definition.getProcessingParameters().copy(); + + this.dataSourceFactory = (DataSourceFactory) jobProperties.getProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); + if (this.dataSourceFactory == null) + { + throw new JobDefinitionException("DataSourceFactory must not be null."); + } + + this.outputRepository = (OutputRepository) jobProperties.getProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY); + if (this.outputRepository == null) + { + throw new JobDefinitionException("OutputRepository must not be null."); + } + + this.inputRepository = + (InputRepository) jobProperties.getProperty(ReportEngineParameterNames.INPUT_REPOSITORY); + if (inputRepository == null) + { + throw new JobDefinitionException("InputRepository must not be null."); + } + + this.outputName = (String) jobProperties.getProperty(ReportEngineParameterNames.OUTPUT_NAME); + if (outputName == null) + { + throw new JobDefinitionException("OutputName must not be null"); + } + + this.imageService = (ImageService) jobProperties.getProperty(ReportEngineParameterNames.IMAGE_SERVICE); + if (imageService == null) + { + throw new JobDefinitionException("A valid image-service implementation must be given."); + } + + this.masterValues = (ArrayList) jobProperties.getProperty(ReportEngineParameterNames.INPUT_MASTER_VALUES); + this.detailColumns = (ArrayList) jobProperties.getProperty(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS); + Integer maxRows=(Integer) jobProperties.getProperty(ReportEngineParameterNames.MAXROWS); + + this.resourceManager = new ResourceManager(); + this.resourceManager.registerDefaults(); + this.resourceManager.registerLoader(new InputRepositoryLoader(inputRepository)); + + try + { + this.report = parseReport(definition); + } + catch (ResourceException e) + { + throw new JobDefinitionException("Failed to parse the report.", e); + } + } + + private OfficeDocument parseReport(final ReportJobDefinition definition) + throws ResourceException, JobDefinitionException + { + final String reportResource = (String) this.jobProperties.getProperty(ReportEngineParameterNames.INPUT_NAME); + if (reportResource == null) + { + throw new JobDefinitionException("Report definition name must be given"); + } + + final Resource res = resourceManager.createDirectly("sun:oo://" + reportResource, OfficeDocument.class); + final OfficeDocument tempReport = (OfficeDocument) res.getResource(); + tempReport.setDataFactory(new StarReportDataFactory(dataSourceFactory)); + tempReport.setJobProperties(definition.getProcessingParameters().copy()); + final ReportParameters inputParameters = tempReport.getInputParameters(); + + final ParameterMap queryParameters = definition.getQueryParameters(); + final String[] paramKeys = queryParameters.keys(); + for (int i = 0; i < paramKeys.length; i++) + { + final String key = paramKeys[i]; + inputParameters.put(key, queryParameters.get(key)); + } + + return tempReport; + } + + public void addProgressIndicator(final JobProgressIndicator indicator) + { + listeners.add(indicator); + } + + /** + * Interrupt the job. + */ + public void interrupt() + { + // hey, not yet .. + } + + /** + * Queries the jobs result status. + * + * @return true, if the job is finished (or has been interrupted), false if the job + * waits for activation. + */ + public boolean isFinished() + { + return finished; + } + + public void finish() + { + finished = true; + } + + /** + * Queries the jobs execution status. + * + * @return true, if the job is currently running, false otherwise. + */ + public boolean isRunning() + { + return !finished; + } + + public void removeProgressIndicator(final JobProgressIndicator indicator) + { + listeners.remove(indicator); + } + + private void collectGroupExpressions(final Node[] nodes, final List expressions, final FormulaParser parser, final Expression reportFunctions[]) + { + for (int i = 0; i < nodes.length; i++) + { + final Node node = nodes[i]; + if (node instanceof OfficeGroup) + { + final OfficeGroup group = (OfficeGroup) node; + final FormulaExpression exp = (FormulaExpression) group.getGroupingExpression(); + if (exp == null) + { + continue; + } + + try + { + final String expression = exp.getFormulaExpression(); + if (expression == null) + { + continue; + } + final FormulaFunction function = (FormulaFunction) parser.parse(expression); + final LValue[] parameters = function.getChildValues(); + if (parameters.length > 0) + { + String name = parameters[0].toString(); + if (parameters[0] instanceof ContextLookup) + { + final ContextLookup context = (ContextLookup) parameters[0]; + name = context.getName(); + } + for (int j = 0; j < reportFunctions.length; j++) + { + if (reportFunctions[j] instanceof FormulaExpression) + { + final FormulaExpression reportExp = (FormulaExpression) reportFunctions[j]; + + if (reportExp.getName().equals(name)) + { + LValue val = parser.parse(reportExp.getFormulaExpression()); + while( !(val instanceof ContextLookup)) + { + if (val instanceof Term) + { + val = ((Term)val).getHeadValue(); + } + else if (val instanceof FormulaFunction) + { + final FormulaFunction reportFunction = (FormulaFunction) val; + val = reportFunction.getChildValues()[0]; + } + } + if (val instanceof ContextLookup) + { + final ContextLookup context = (ContextLookup) val; + name = context.getName(); + } + break; + } + } + } + + final Object[] pair = new Object[2]; + pair[0] = name; + pair[1] = group.getAttribute(OfficeNamespaces.OOREPORT_NS, "sort-ascending"); + expressions.add(pair); + } + } + catch (ParseException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } + } + else if (node instanceof OfficeDetailSection) + { + return; + } + if (node instanceof Section) + { + final Section section = (Section) node; + collectGroupExpressions(section.getNodeArray(), expressions, parser, reportFunctions); + } + } + } + + private void setMetaDataProperties(DefaultReportJob job) + { + job.getConfiguration().setConfigProperty(ReportEngineParameterNames.AUTHOR, (String) jobProperties.getProperty(ReportEngineParameterNames.AUTHOR)); + job.getConfiguration().setConfigProperty(ReportEngineParameterNames.TITLE, (String) jobProperties.getProperty(ReportEngineParameterNames.TITLE)); + } + + /** + * Although we might want to run the job as soon as it has been created, sometimes it is + * wiser to let the user add some listeners first. If we execute at once, the user + * either has to deal with threading code or wont receive any progress information in + * single threaded environments. + */ + public void execute() + throws ReportExecutionException, IOException + { + final DefaultReportJob job = new DefaultReportJob(report); + setMetaDataProperties(job); + final String contentType = (String) jobProperties.getProperty(ReportEngineParameterNames.CONTENT_TYPE); + //noinspection OverlyBroadCatchBlock + try + { + final ReportParameters parameters = job.getParameters(); + + if (masterValues != null && detailColumns != null) + { + parameters.put(SDBCReportDataFactory.MASTER_VALUES, masterValues); + parameters.put(SDBCReportDataFactory.DETAIL_COLUMNS, detailColumns); + } + + final Node[] nodes = report.getNodeArray(); + + final FormulaParser parser = new FormulaParser(); + final ArrayList expressions = new ArrayList(); + final OfficeReport officeReport = (OfficeReport) ((Section) nodes[0]).getNode(0); + final Section reportBody = (Section) officeReport.getBodySection(); + collectGroupExpressions(reportBody.getNodeArray(), expressions, parser, officeReport.getExpressions()); + parameters.put(SDBCReportDataFactory.GROUP_EXPRESSIONS, expressions); + final String command = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, "command"); + final String commandType = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, SDBCReportDataFactory.COMMAND_TYPE); + final String escapeProcessing = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, SDBCReportDataFactory.ESCAPE_PROCESSING); + report.setQuery(command); + parameters.put(SDBCReportDataFactory.COMMAND_TYPE, commandType); + parameters.put(SDBCReportDataFactory.ESCAPE_PROCESSING, !("false".equals(escapeProcessing))); + + final String filter = (String) officeReport.getAttribute(OfficeNamespaces.OOREPORT_NS, "filter"); + parameters.put(SDBCReportDataFactory.UNO_FILTER, filter); + + parameters.put(ReportEngineParameterNames.MAXROWS, report.getJobProperties().getProperty(ReportEngineParameterNames.MAXROWS)); + + final long startTime = System.currentTimeMillis(); + final ReportProcessor rp = getProcessorForContentType(contentType); + rp.processReport(job); + job.close(); + final long endTime = System.currentTimeMillis(); + LOGGER.debug("Report processing time: " + (endTime - startTime)); + } + catch (final Exception e) + { + String message = e.getMessage(); + if (message == null || message.length() == 0) + { + message = "Failed to process the report"; + } + throw new ReportExecutionException(message, e); + } + + } + + protected ReportProcessor getProcessorForContentType(final String mimeType) + throws ReportExecutionException + { + final ReportProcessor ret; + + if (PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET.equals(mimeType)) + { + ret = new SpreadsheetRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); + } + else if (PentahoReportEngineMetaData.OPENDOCUMENT_TEXT.equals(mimeType)) + { + ret = new TextRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); + } + else if (PentahoReportEngineMetaData.OPENDOCUMENT_CHART.equals(mimeType)) + { + ret = new ChartRawReportProcessor(inputRepository, outputRepository, outputName, imageService, dataSourceFactory); + } + else if (PentahoReportEngineMetaData.DEBUG.equals(mimeType)) + { + ret = new XmlPrintReportProcessor(System.out, "ISO-8859-1"); + } + else + { + throw new ReportExecutionException("Invalid mime-type"); + } + + return ret; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaOpCodeMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaOpCodeMapper.java new file mode 100644 index 000000000000..5c9f59819995 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaOpCodeMapper.java @@ -0,0 +1,144 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.sheet.FormulaLanguage; +import com.sun.star.sheet.FormulaMapGroup; +import com.sun.star.sheet.FormulaOpCodeMapEntry; +import com.sun.star.sheet.FormulaToken; + +import java.util.ArrayList; +import java.util.Map; + +public final class SOFormulaOpCodeMapper extends WeakBase + implements com.sun.star.sheet.XFormulaOpCodeMapper, XServiceInfo +{ + + private static final String __serviceName = "org.libreoffice.report.pentaho.SOFormulaOpCodeMapper"; + private final SOFormulaParser parser; + // attributes + final private int m_OpCodeExternal = 0; + final private int m_OpCodeUnknown = 0; + + public SOFormulaOpCodeMapper(SOFormulaParser parser) + { + this.parser = parser; + } + + // com.sun.star.sheet.XFormulaOpCodeMapper: + public int getOpCodeExternal() + { + return m_OpCodeExternal; + } + + public int getOpCodeUnknown() + { + return m_OpCodeUnknown; + } + + public com.sun.star.sheet.FormulaToken[] getMappings(String[] Names, int Language) throws com.sun.star.lang.IllegalArgumentException + { + if (Language != FormulaLanguage.ODFF) + { + throw new IllegalArgumentException(); + } + final ArrayList token = new ArrayList(); + final Map parserNames = parser.getNames(); + for (int i = 0; i < Names.length; i++) + { + if (parserNames.containsKey(Names[i])) + { + token.add(((FormulaOpCodeMapEntry) parserNames.get(Names[i])).Token); + } + + } + return token.toArray(new FormulaToken[token.size()]); + } + + public com.sun.star.sheet.FormulaOpCodeMapEntry[] getAvailableMappings(int Language, int Groups) throws com.sun.star.lang.IllegalArgumentException + { + if (Language != FormulaLanguage.ODFF) + { + throw new IllegalArgumentException(); + } + final ArrayList token = new ArrayList(); + if (Groups == FormulaMapGroup.SPECIAL) + { + return parser.getSpecialOpCodes().toArray(new FormulaOpCodeMapEntry[parser.getSpecialOpCodes().size()]); + } + else + { + if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values()); + } + if ((Groups & FormulaMapGroup.SEPARATORS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.SEPARATORS).values()); + } + if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values()); + } + if ((Groups & FormulaMapGroup.UNARY_OPERATORS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.UNARY_OPERATORS).values()); + } + if ((Groups & FormulaMapGroup.BINARY_OPERATORS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.BINARY_OPERATORS).values()); + } + if ((Groups & FormulaMapGroup.FUNCTIONS) != 0) + { + token.addAll(parser.getGroup(SOFormulaParser.FUNCTIONS).values()); + } + } + + return token.toArray(new FormulaOpCodeMapEntry[token.size()]); + } + + public String getImplementationName() + { + return SOFormulaOpCodeMapper.class.getName(); + } + + public boolean supportsService(String sServiceName) + { + return sServiceName.equals(__serviceName); + } + + public String[] getSupportedServiceNames() + { + return getServiceNames(); + } + + /** + * This method is a simple helper function to used in the static component initialisation functions as well as + * in getSupportedServiceNames. + * @return + */ + public static String[] getServiceNames() + { + return new String[] + { + __serviceName + }; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaParser.java b/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaParser.java new file mode 100644 index 000000000000..f604210ffb67 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/SOFormulaParser.java @@ -0,0 +1,434 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + + +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lib.uno.helper.ComponentBase; +import com.sun.star.lib.uno.helper.PropertySetMixin; +import com.sun.star.sheet.FormulaLanguage; +import com.sun.star.sheet.FormulaMapGroup; +import com.sun.star.sheet.FormulaMapGroupSpecialOffset; +import com.sun.star.sheet.FormulaOpCodeMapEntry; +import com.sun.star.sheet.FormulaToken; +import com.sun.star.sheet.XFormulaOpCodeMapper; +import com.sun.star.uno.Any; +import com.sun.star.uno.Exception; +import com.sun.star.uno.Type; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +import java.io.StringReader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.pentaho.reporting.libraries.base.config.Configuration; +import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; +import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; +import org.pentaho.reporting.libraries.formula.parser.FormulaParser; +import org.pentaho.reporting.libraries.formula.parser.GeneratedFormulaParserConstants; +import org.pentaho.reporting.libraries.formula.parser.GeneratedFormulaParserTokenManager; +import org.pentaho.reporting.libraries.formula.parser.JavaCharStream; +import org.pentaho.reporting.libraries.formula.parser.ParseException; +import org.pentaho.reporting.libraries.formula.parser.Token; +import org.pentaho.reporting.libraries.formula.parser.TokenMgrError; + + +public final class SOFormulaParser extends ComponentBase + implements com.sun.star.report.meta.XFormulaParser, XServiceInfo +{ + /* Need this to get around generics array creation restriction */ + private static class StringOpcodeMap extends HashMap {} + + public static final int SEPARATORS = 0; + public static final int ARRAY_SEPARATORS = 1; + public static final int UNARY_OPERATORS = 2; + public static final int BINARY_OPERATORS = 3; + public static final int FUNCTIONS = 4; + private final XComponentContext m_xContext; + private final PropertySetMixin m_prophlp; + private static final String __serviceName = "com.sun.star.report.meta.FormulaParser"; + private static final String OPERATORS = "org.pentaho.reporting.libraries.formula.operators."; + // attributes + final private List m_OpCodeMap = new ArrayList(); + private XFormulaOpCodeMapper formulaOpCodeMapper = null; + private final Map parserAllOpCodes = new HashMap(); + private final Map parserNames = new HashMap(); + private final StringOpcodeMap[] groupOpCodes = new StringOpcodeMap[5]; + private final List specialOpCodes = new ArrayList(); + private int ownTokenCounter = 1000; + private final FormulaOpCodeMapEntry opCodePush; + private final FormulaParser parser; + + public SOFormulaParser(final XComponentContext context) + { + + m_xContext = context; + final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); + + parser = new FormulaParser(); + try + { + final XFormulaOpCodeMapper mapper = (XFormulaOpCodeMapper) UnoRuntime.queryInterface(XFormulaOpCodeMapper.class, m_xContext.getServiceManager().createInstanceWithContext("simple.formula.FormulaOpCodeMapperObj", m_xContext)); + FormulaOpCodeMapEntry[] opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.FUNCTIONS); + final DefaultFormulaContext defaultContext = new DefaultFormulaContext(); + final FunctionRegistry functionRegistry = defaultContext.getFunctionRegistry(); + + String[] names = functionRegistry.getFunctionNames(); + addOpCodes(names, opCodes, FUNCTIONS); + names = getOperators(defaultContext, OPERATORS); + opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.UNARY_OPERATORS); + addOpCodes(names, opCodes, UNARY_OPERATORS); + opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.BINARY_OPERATORS); + addOpCodes(names, opCodes, BINARY_OPERATORS); + + names = GeneratedFormulaParserConstants.tokenImage.clone(); + for (int i = 0; i < names.length; i++) + { + final String token = names[i]; + if (token != null && token.length() > 0 && token.charAt(0) == '"') + { + names[i] = token.substring(1, token.length() - 1); + } + } + opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.SEPARATORS); + addOpCodes(names, opCodes, SEPARATORS, false); + + opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.ARRAY_SEPARATORS); + addOpCodes(names, opCodes, ARRAY_SEPARATORS, false); + + opCodes = mapper.getAvailableMappings(FormulaLanguage.ODFF, FormulaMapGroup.SPECIAL); + + for (int i = 0; i < opCodes.length; i++) + { + final FormulaOpCodeMapEntry opCode = opCodes[i]; + parserAllOpCodes.put(opCode.Token.OpCode, opCode); + specialOpCodes.add(opCode); + } + // addOpCodes(names, opCodes,SPECIAL,false); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + opCodePush = specialOpCodes.get(FormulaMapGroupSpecialOffset.PUSH); + Thread.currentThread().setContextClassLoader(cl); + // use the last parameter of the PropertySetMixin constructor + // for your optional attributes if necessary. See the documentation + // of the PropertySetMixin helper for further information. + // Ensure that your attributes are initialized correctly! + m_prophlp = new PropertySetMixin(m_xContext, this, + new Type(com.sun.star.report.meta.XFormulaParser.class), null); + } + + // com.sun.star.sheet.XFormulaParser: + public com.sun.star.sheet.FormulaToken[] parseFormula(String aFormula, com.sun.star.table.CellAddress aReferencePos) + { + final ArrayList tokens = new ArrayList(); + if (!"=".equals(aFormula)) + { + String formula; + if (aFormula.charAt(0) == '=') + { + formula = aFormula.substring(1); + } + else + { + formula = aFormula; + } + final ArrayList images = new ArrayList(); + try + { + int brackets = 0; + final GeneratedFormulaParserTokenManager tokenParser = new GeneratedFormulaParserTokenManager(new JavaCharStream(new StringReader(formula), 1, 1)); + Token token = tokenParser.getNextToken(); + while (token.kind != GeneratedFormulaParserConstants.EOF) + { + final FormulaToken formulaToken; + images.add(token.image); + final String upper = token.image.toUpperCase(); + if (parserNames.containsKey(upper)) + { + if ("(".equals(token.image)) + { + brackets++; + } + else if (")".equals(token.image)) + { + --brackets; + } + final FormulaOpCodeMapEntry opCode = parserNames.get(upper); + formulaToken = opCode.Token; + } + else if (token.kind == GeneratedFormulaParserConstants.WHITESPACE) + { + final FormulaOpCodeMapEntry opCode = specialOpCodes.get(FormulaMapGroupSpecialOffset.SPACES); + formulaToken = opCode.Token; + } + else + { + formulaToken = new FormulaToken(); + formulaToken.OpCode = opCodePush.Token.OpCode; + formulaToken.Data = new Any(Type.STRING, token.image); + } + + tokens.add(formulaToken); + token = tokenParser.getNextToken(); + } + if (brackets > 0) + { + final FormulaOpCodeMapEntry opCode = parserNames.get(")"); + while (brackets-- != 0) + { + formula = formula.concat(")"); + images.add(")"); + tokens.add(opCode.Token); + } + + } + + parser.parse(formula); + } + catch (ParseException ex) + { + boolean found = false; + // error occurred so all token must be bad + for (int i = 0; i < tokens.size(); i++) + { + if (!found && ex.currentToken != null && images.get(i).equals(ex.currentToken.image)) + { + found = true; + } + if (found) + { + final FormulaToken dest = new FormulaToken(); + dest.OpCode = specialOpCodes.get(FormulaMapGroupSpecialOffset.BAD).Token.OpCode; + dest.Data = new Any(Type.STRING, images.get(i)); + tokens.remove(i); + tokens.add(i, dest); + } + } + } + catch (java.lang.Exception e) + { + } + catch (TokenMgrError e) + { + } + } + return tokens.toArray(new FormulaToken[tokens.size()]); + } + + public String printFormula(com.sun.star.sheet.FormulaToken[] aTokens, com.sun.star.table.CellAddress aReferencePos) + { + final StringBuffer ret = new StringBuffer(); + for (int i = 0; i < aTokens.length; i++) + { + final FormulaToken formulaToken = aTokens[i]; + if (formulaToken.OpCode == opCodePush.Token.OpCode && !formulaToken.Data.equals(Any.VOID)) + { + ret.append(formulaToken.Data); + } + else if (parserAllOpCodes.containsKey(formulaToken.OpCode)) + { + final FormulaOpCodeMapEntry opCode = parserAllOpCodes.get(formulaToken.OpCode); + if (opCode.Name.length() > 0) + { + ret.append(opCode.Name); + } + else if (!formulaToken.Data.equals(Any.VOID)) + { + ret.append(formulaToken.Data); + } + } + } + return ret.toString(); + } + + // com.sun.star.beans.XPropertySet: + public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() + { + return m_prophlp.getPropertySetInfo(); + } + + public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.setPropertyValue(aPropertyName, aValue); + } + + public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + return m_prophlp.getPropertyValue(aPropertyName); + } + + public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addPropertyChangeListener(aPropertyName, xListener); + } + + public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removePropertyChangeListener(aPropertyName, xListener); + } + + public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addVetoableChangeListener(aPropertyName, xListener); + } + + public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); + } + + // com.sun.star.report.meta.XFormulaParser: + public com.sun.star.sheet.FormulaOpCodeMapEntry[] getOpCodeMap() + { + return m_OpCodeMap.toArray(new FormulaOpCodeMapEntry[m_OpCodeMap.size()]); + } + + public void setOpCodeMap(com.sun.star.sheet.FormulaOpCodeMapEntry[] the_value) + { + } + + public String getImplementationName() + { + return SOFormulaParser.class.getName(); + } + + public boolean supportsService(String sServiceName) + { + return sServiceName.equals(__serviceName); + } + + public String[] getSupportedServiceNames() + { + return getServiceNames(); + } + + /** + * This method is a simple helper function to used in the static component initialisation functions as well as + * in getSupportedServiceNames. + * @return + */ + public static String[] getServiceNames() + { + return new String[] + { + __serviceName + }; + } + + public XFormulaOpCodeMapper getFormulaOpCodeMapper() + { + if (formulaOpCodeMapper == null) + { + formulaOpCodeMapper = new SOFormulaOpCodeMapper(this); + } + + return formulaOpCodeMapper; + } + + private void addOpCodes(String[] names, FormulaOpCodeMapEntry[] opCodes, int group) + { + addOpCodes(names, opCodes, group, true); + } + + private void addOpCodes(String[] names, FormulaOpCodeMapEntry[] opCodes, int group, boolean add) + { + groupOpCodes[group] = new StringOpcodeMap(); + for (int j = 0; j < names.length; j++) + { + FormulaOpCodeMapEntry opCode = null; + int i = 0; + for (; i < opCodes.length; i++) + { + opCode = opCodes[i]; + if (names[j].equals(opCode.Name)) + { + break; + } + } + if (i >= opCodes.length) + { + if (!add) + { + continue; + } + final FormulaToken token = new FormulaToken(ownTokenCounter++, Any.VOID); + opCode = new FormulaOpCodeMapEntry(names[j], token); + } + parserNames.put(names[j], opCode); + parserAllOpCodes.put(opCode.Token.OpCode, opCode); + groupOpCodes[group].put(opCode.Token.OpCode, opCode); + } + } + + public Map getNames() + { + return parserNames; + } + + public Map getGroup(int group) + { + return groupOpCodes[group]; + } + + private String[] getOperators(DefaultFormulaContext defaultContext, final String _kind) + { + final ArrayList ops = new ArrayList(); + final Configuration configuration = defaultContext.getConfiguration(); + final Iterator iter = configuration.findPropertyKeys(_kind); + while (iter.hasNext()) + { + final String configKey = (String) iter.next(); + if (!configKey.endsWith(".class")) + { + continue; + } + final String operatorClass = configuration.getConfigProperty(configKey); + if (operatorClass == null) + { + continue; + } + if (operatorClass.length() == 0) + { + continue; + } + final String tokenKey = configKey.substring(0, configKey.length() - ".class".length()) + ".token"; + final String token = configuration.getConfigProperty(tokenKey); + if (token == null) + { + continue; + } + ops.add(token.trim()); + } + return ops.toArray(new String[ops.size()]); + } + + public List getSpecialOpCodes() + { + return specialOpCodes; + } +} + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/SOFunctionManager.java b/reportbuilder/java/org/libreoffice/report/pentaho/SOFunctionManager.java new file mode 100644 index 000000000000..3e96ca003fee --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/SOFunctionManager.java @@ -0,0 +1,158 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import com.sun.star.container.NoSuchElementException; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lib.uno.helper.ComponentBase; +import com.sun.star.report.meta.XFunctionCategory; +import com.sun.star.report.meta.XFunctionDescription; +import com.sun.star.report.meta.XFunctionManager; +import com.sun.star.uno.XComponentContext; + +import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; +import org.pentaho.reporting.libraries.formula.function.FunctionCategory; +import org.pentaho.reporting.libraries.formula.function.FunctionDescription; +import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; + +public final class SOFunctionManager extends ComponentBase implements XFunctionManager, XServiceInfo +{ + + private final XComponentContext m_xContext; + /** + * The service name, that must be used to get an instance of this service. + */ + private static final String __serviceName = + "com.sun.star.report.meta.FunctionManager"; + final private FunctionCategory[] categories; + final private FunctionRegistry functionRegistry; + final private DefaultFormulaContext defaultContext; + + public SOFunctionManager(XComponentContext context) + { + m_xContext = context; + final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); + defaultContext = new DefaultFormulaContext(); + functionRegistry = defaultContext.getFunctionRegistry(); + categories = functionRegistry.getCategories(); + Thread.currentThread().setContextClassLoader(cl); + + } + + /** + * This method returns an array of all supported service names. + * + * @return Array of supported service names. + */ + public String[] getSupportedServiceNames() + { + return getServiceNames(); + } + + /** + * This method is a simple helper function to used in the static component initialisation functions as well as + * in getSupportedServiceNames. + * @return + */ + public static String[] getServiceNames() + { + return new String[] + { + __serviceName + }; + } + + /** + * This method returns true, if the given service will be supported by the component. + * + * @param sServiceName Service name. + * @return True, if the given service name will be supported. + */ + public boolean supportsService(final String sServiceName) + { + return sServiceName.equals(__serviceName); + } + + /** + * Return the class name of the component. + * + * @return Class name of the component. + */ + public String getImplementationName() + { + return SOFunctionManager.class.getName(); + } + + // com.sun.star.container.XElementAccess: + public com.sun.star.uno.Type getElementType() + { + return new com.sun.star.uno.Type(XFunctionCategory.class); + } + + public boolean hasElements() + { + return categories.length != 0; + } + + // com.sun.star.container.XIndexAccess: + public int getCount() + { + return categories.length; + } + + public Object getByIndex(int Index) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException + { + return getCategory(Index); + } + + // com.sun.star.report.meta.XFunctionManager: + public com.sun.star.report.meta.XFunctionCategory getCategory(int position) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException + { + if (position >= categories.length) + { + throw new com.sun.star.lang.IndexOutOfBoundsException(); + } + return new StarFunctionCategory(defaultContext, m_xContext, functionRegistry, position, categories[position]); + } + + public XFunctionDescription getFunctionByName(String arg0) throws NoSuchElementException + { + final FunctionDescription func = functionRegistry.getMetaData(arg0); + if (func == null) + { + throw new NoSuchElementException(); + } + int i = 0; + for (; i < categories.length; i++) + { + if (categories[i] == func.getCategory()) + { + break; + } + } + try + { + return new StarFunctionDescription(defaultContext, m_xContext, getCategory(i), func); + } + catch (Exception ex) + { + } + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/SOReportJobFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/SOReportJobFactory.java new file mode 100644 index 000000000000..8d99ddf8b652 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/SOReportJobFactory.java @@ -0,0 +1,420 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import com.sun.star.beans.NamedValue; +import com.sun.star.beans.PropertyVetoException; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertyChangeListener; +import com.sun.star.beans.XPropertySet; +import com.sun.star.beans.XVetoableChangeListener; +import com.sun.star.container.XChild; +import com.sun.star.embed.XStorage; +import com.sun.star.frame.XModel; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lang.XSingleComponentFactory; +import com.sun.star.lib.uno.helper.Factory; +import com.sun.star.lib.uno.helper.PropertySetMixin; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.registry.InvalidRegistryException; +import com.sun.star.registry.InvalidValueException; +import com.sun.star.registry.XRegistryKey; +import com.sun.star.registry.XSimpleRegistry; +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.JobProperties; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.ReportExecutionException; +import org.libreoffice.report.ReportJob; +import org.libreoffice.report.ReportJobDefinition; +import org.libreoffice.report.ReportJobFactory; +import org.libreoffice.report.SDBCReportDataFactory; +import org.libreoffice.report.SOImageService; +import org.libreoffice.report.StorageRepository; +import com.sun.star.report.XReportDefinition; +import com.sun.star.sdb.XDocumentDataSource; +import com.sun.star.sdbc.XConnection; +import com.sun.star.sdbc.XRowSet; +import com.sun.star.task.XJob; +import com.sun.star.uno.Exception; +import com.sun.star.uno.Type; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class capsulates the class, that implements the minimal component, a factory for creating the service + * (__getComponentFactory) and a method, that writes the information into the given registry key + * (__writeRegistryServiceInfo). + */ +public class SOReportJobFactory +{ + + private SOReportJobFactory() + { + } + + public static class _SOReportJobFactory extends WeakBase implements XInitialization, XServiceInfo, XJob, XPropertySet, ReportJobFactory + { + + private static final Log LOGGER = LogFactory.getLog(_SOReportJobFactory.class); + /** + * The service name, that must be used to get an instance of this service. + */ + private static final String __serviceName = + "org.libreoffice.report.pentaho.SOReportJobFactory"; + private final PropertySetMixin m_prophlp; + /** + * The initial component contextr, that gives access to the service manager, supported singletons, ... It's + * often later used + */ + private final XComponentContext m_cmpCtx; + private XConnection activeConnection; + private XReportDefinition report; + + public _SOReportJobFactory(final XComponentContext xCompContext) + { + m_cmpCtx = xCompContext; + m_prophlp = new PropertySetMixin(m_cmpCtx, this, + new Type(XJob.class), + null); // no optionals + } + + /** + * This method is a member of the interface for initializing an object directly after its creation. + * + * @param object This array of arbitrary objects will be passed to the component after its creation. + * @throws Exception Every exception will not be handled, but will be passed to the caller. + */ + public void initialize(final Object[] object) + throws com.sun.star.uno.Exception + { + /* The component describes what arguments its expected and in which + * order!At this point you can read the objects and can intialize + * your component using these objects. + */ + } + + /** + * This method returns an array of all supported service names. + * + * @return Array of supported service names. + */ + public String[] getSupportedServiceNames() + { + return getServiceNames(); + } + + /** + * This method is a simple helper function to used in the static component initialisation functions as well as + * in getSupportedServiceNames. + * @return + */ + public static String[] getServiceNames() + { + return new String[] + { + __serviceName + }; + } + + /** + * This method returns true, if the given service will be supported by the component. + * + * @param sServiceName Service name. + * @return True, if the given service name will be supported. + */ + public boolean supportsService(final String sServiceName) + { + return sServiceName.equals(__serviceName); + } + + /** + * Return the class name of the component. + * + * @return Class name of the component. + */ + public String getImplementationName() + { + return SOReportJobFactory.class.getName(); + } + + private String getLocaleFromRegistry(final XSimpleRegistry simpleReg, final String path, final String value) + { + String currentLocale = null; + try + { + simpleReg.open(path, true, false); + final XRegistryKey xRegistryRootKey = simpleReg.getRootKey(); + // read locale + final XRegistryKey locale = xRegistryRootKey.openKey(value); + if (locale != null) + { + final String newLocale = locale.getStringValue(); + if (newLocale != null) + { + currentLocale = newLocale.replace('-', '_'); + } + } + } + catch (InvalidValueException ex) + { + Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); + } + catch (InvalidRegistryException ex) + { + Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); + } + + return currentLocale; + } + + public Object execute(final NamedValue[] namedValue) + throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception + { + final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); + try + { + final XSimpleRegistry simpleReg = (XSimpleRegistry) UnoRuntime.queryInterface(XSimpleRegistry.class, + m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.configuration.ConfigurationRegistry", m_cmpCtx)); + + String currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Setup", "L10N/ooSetupSystemLocale"); + if (currentLocale == null || "".equals(currentLocale)) + { + currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Office.Linguistic", "General/DefaultLocale"); + } + if (currentLocale != null && !"".equals(currentLocale)) + { + System.setProperty("org.pentaho.reporting.libraries.formula.locale", currentLocale); + } + final ReportJob job = createReportJob(namedValue); + job.execute(); + + } + catch (java.lang.Exception e) + { + LOGGER.error("ReportProcessing failed", e); + throw new com.sun.star.lang.WrappedTargetException(e.getMessage(), this, null); + } + catch (java.lang.IncompatibleClassChangeError e2) + { + LOGGER.error("Detected an IncompatibleClassChangeError"); + throw new com.sun.star.lang.WrappedTargetException("caught a " + e2.getClass().getName(), this, new com.sun.star.uno.Exception(e2.getLocalizedMessage())); + } + Thread.currentThread().setContextClassLoader(cl); + + return null; + } + + public ReportJob createReportJob(final NamedValue[] namedValue) throws IllegalArgumentException, ReportExecutionException, Exception + { + XStorage input = null; + XStorage output = null; + XRowSet rowSet = null; + String mimetype = null; + String author = null; + String title = null; + Integer maxRows = null; + + for (int i = 0; i < namedValue.length; ++i) + { + final NamedValue aProps = namedValue[i]; + if ("ActiveConnection".equalsIgnoreCase(aProps.Name)) + { + activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, aProps.Value); + } + else if ("ReportDefinition".equalsIgnoreCase(aProps.Name)) + { + report = (XReportDefinition) UnoRuntime.queryInterface(XReportDefinition.class, aProps.Value); + } + else if ("InputStorage".equalsIgnoreCase(aProps.Name)) + { + input = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); + } + else if ("OutputStorage".equalsIgnoreCase(aProps.Name)) + { + output = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); + } + else if ("RowSet".equalsIgnoreCase(aProps.Name)) + { + rowSet = (XRowSet) UnoRuntime.queryInterface(XRowSet.class, aProps.Value); + } + else if ("mimetype".equalsIgnoreCase(aProps.Name)) + { + mimetype = (String) aProps.Value; + } + else if ("MaxRows".equalsIgnoreCase(aProps.Name)) + { + maxRows = (Integer) aProps.Value; + } + else if (ReportEngineParameterNames.AUTHOR.equalsIgnoreCase(aProps.Name)) + { + author = (String) aProps.Value; + } + else if (ReportEngineParameterNames.TITLE.equalsIgnoreCase(aProps.Name)) + { + title = (String) aProps.Value; + } + } + + if (input == null || output == null) + { + throw new com.sun.star.lang.IllegalArgumentException(); + } + + if (rowSet == null) + { + if (report == null || activeConnection == null) + { + throw new com.sun.star.lang.IllegalArgumentException(); + } + mimetype = report.getMimeType(); + } + else + { + final XPropertySet set = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); + if (set == null) + { + throw new com.sun.star.lang.IllegalArgumentException(); + } + activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, set.getPropertyValue("ActiveConnection")); + } + if (mimetype == null) + { + mimetype = PentahoReportEngineMetaData.OPENDOCUMENT_TEXT; + } + + final XChild child = UnoRuntime.queryInterface(XChild.class, activeConnection); + final XDocumentDataSource docSource = UnoRuntime.queryInterface(XDocumentDataSource.class, child.getParent()); + final XModel model = UnoRuntime.queryInterface(XModel.class, docSource.getDatabaseDocument()); + final DataSourceFactory dataFactory = new SDBCReportDataFactory(m_cmpCtx, activeConnection); + final StorageRepository storageRepository = new StorageRepository(input, output, model.getURL()); + + final String inputName = "content.xml"; + final String outputName = "content.xml"; + + final PentahoReportEngine engine = new PentahoReportEngine(); + final ReportJobDefinition definition = engine.createJobDefinition(); + final JobProperties procParms = definition.getProcessingParameters(); + procParms.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, storageRepository); + procParms.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, storageRepository); + procParms.setProperty(ReportEngineParameterNames.INPUT_NAME, inputName); + procParms.setProperty(ReportEngineParameterNames.OUTPUT_NAME, outputName); + procParms.setProperty(ReportEngineParameterNames.CONTENT_TYPE, mimetype); + procParms.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataFactory); + procParms.setProperty(ReportEngineParameterNames.IMAGE_SERVICE, new SOImageService(m_cmpCtx)); + procParms.setProperty(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY, this); + procParms.setProperty(ReportEngineParameterNames.MAXROWS, maxRows); + if (author != null) + { + procParms.setProperty(ReportEngineParameterNames.AUTHOR, author); + } + if (title != null) + { + procParms.setProperty(ReportEngineParameterNames.TITLE, title); + } + + return engine.createJob(definition); + } + + // com.sun.star.beans.XPropertySet: + public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() + { + return m_prophlp.getPropertySetInfo(); + } + + public void setPropertyValue(final String aPropertyName, final Object aValue) + throws UnknownPropertyException, PropertyVetoException, com.sun.star.lang.IllegalArgumentException, + WrappedTargetException + { + m_prophlp.setPropertyValue(aPropertyName, aValue); + } + + public Object getPropertyValue(final String aPropertyName) + throws UnknownPropertyException, WrappedTargetException + { + return m_prophlp.getPropertyValue(aPropertyName); + } + + public void addPropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) + throws UnknownPropertyException, WrappedTargetException + { + m_prophlp.addPropertyChangeListener(aPropertyName, xListener); + } + + public void removePropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) + throws UnknownPropertyException, WrappedTargetException + { + m_prophlp.removePropertyChangeListener(aPropertyName, xListener); + } + + public void addVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) + throws UnknownPropertyException, WrappedTargetException + { + m_prophlp.addVetoableChangeListener(aPropertyName, xListener); + } + + public void removeVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) + throws UnknownPropertyException, WrappedTargetException + { + m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); + } + } + + /** + * Gives a factory for creating the service. This method is called by the JavaLoader + *

+ * + * @param sImplName the name of the implementation for which a service is desired + * @return returns a XSingleComponentFactory for creating the component + * @see com.sun.star.comp.loader.JavaLoader + */ + public static XSingleComponentFactory __getComponentFactory(final String sImplName) + { + XSingleComponentFactory xFactory = null; + + try + { + if (sImplName.equals(_SOReportJobFactory.class.getName())) + { + xFactory = Factory.createComponentFactory(_SOReportJobFactory.class, _SOReportJobFactory.getServiceNames()); + } + else if (sImplName.equals(SOFunctionManager.class.getName())) + { + xFactory = Factory.createComponentFactory(SOFunctionManager.class, SOFunctionManager.getServiceNames()); + } + else if (sImplName.equals(SOFormulaParser.class.getName())) + { + xFactory = Factory.createComponentFactory(SOFormulaParser.class, SOFormulaParser.getServiceNames()); + } + } + catch (java.lang.IncompatibleClassChangeError e2) + { + } + + return xFactory; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionCategory.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionCategory.java new file mode 100644 index 000000000000..83f26a0ea168 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionCategory.java @@ -0,0 +1,166 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import com.sun.star.lib.uno.helper.PropertySetMixin; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.report.meta.XFunctionDescription; +import com.sun.star.uno.Type; +import com.sun.star.uno.XComponentContext; + +import java.util.Locale; +import java.util.MissingResourceException; + +import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; +import org.pentaho.reporting.libraries.formula.function.FunctionCategory; +import org.pentaho.reporting.libraries.formula.function.FunctionRegistry; + +public final class StarFunctionCategory extends WeakBase + implements com.sun.star.report.meta.XFunctionCategory +{ + + private final XComponentContext m_xContext; + private final PropertySetMixin m_prophlp; + // attributes + private final int m_Number; + private final FunctionCategory category; + private final FunctionRegistry functionRegistry; + private final String functions[]; + private final DefaultFormulaContext defaultContext; + private final Locale defaultLocale; + + public StarFunctionCategory(DefaultFormulaContext defaultContext, final XComponentContext context, final FunctionRegistry functionRegistry, final int _number, final FunctionCategory category) + { + this.defaultContext = defaultContext; + m_xContext = context; + m_Number = _number; + this.category = category; + this.functionRegistry = functionRegistry; + Locale locale; + try + { + category.getDisplayName(defaultContext.getLocalizationContext().getLocale()); + locale = defaultContext.getLocalizationContext().getLocale(); + } + catch (MissingResourceException e) + { + locale = Locale.ENGLISH; + try + { + category.getDisplayName(locale); + } + catch (MissingResourceException e2) + { + } + } + this.defaultLocale = locale; + + functions = functionRegistry.getFunctionNamesByCategory(category); + // use the last parameter of the PropertySetMixin constructor + // for your optional attributes if necessary. See the documentation + // of the PropertySetMixin helper for further information. + // Ensure that your attributes are initialized correctly! + m_prophlp = new PropertySetMixin(m_xContext, this, + new Type(com.sun.star.report.meta.XFunctionCategory.class), null); + } + + // com.sun.star.beans.XPropertySet: + public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() + { + return m_prophlp.getPropertySetInfo(); + } + + public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.setPropertyValue(aPropertyName, aValue); + } + + public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + return m_prophlp.getPropertyValue(aPropertyName); + } + + public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addPropertyChangeListener(aPropertyName, xListener); + } + + public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removePropertyChangeListener(aPropertyName, xListener); + } + + public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addVetoableChangeListener(aPropertyName, xListener); + } + + public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); + } + + // com.sun.star.container.XElementAccess: + public com.sun.star.uno.Type getElementType() + { + return new com.sun.star.uno.Type(XFunctionDescription.class); + } + + public boolean hasElements() + { + return functions.length != 0; + } + + // com.sun.star.container.XIndexAccess: + public int getCount() + { + return functions.length; + } + + public Object getByIndex(int Index) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException + { + return getFunction(Index); + } + + // com.sun.star.report.meta.XFunctionCategory: + public int getNumber() + { + return m_Number; + } + + public String getName() + { + try + { + return category.getDisplayName(defaultLocale); + } + catch(Exception ex) + { + } + return "Missing category for number " + m_Number; + } + + public com.sun.star.report.meta.XFunctionDescription getFunction(int position) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException + { + if (position >= functions.length) + { + throw new IndexOutOfBoundsException(); + } + return new StarFunctionDescription(defaultContext, m_xContext, this, functionRegistry.getMetaData(functions[position])); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionDescription.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionDescription.java new file mode 100644 index 000000000000..832137e2a4f4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarFunctionDescription.java @@ -0,0 +1,199 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import com.sun.star.lib.uno.helper.PropertySetMixin; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.report.meta.XFunctionCategory; +import com.sun.star.sheet.FunctionArgument; +import com.sun.star.uno.Type; +import com.sun.star.uno.XComponentContext; + +import java.util.Locale; +import java.util.MissingResourceException; + +import org.pentaho.reporting.libraries.formula.DefaultFormulaContext; +import org.pentaho.reporting.libraries.formula.function.FunctionDescription; + +public final class StarFunctionDescription extends WeakBase + implements com.sun.star.report.meta.XFunctionDescription +{ + + private final XComponentContext m_xContext; + private final PropertySetMixin m_prophlp; + // attributes +// final private com.sun.star.report.meta.XFunctionCategory m_Category; + private final FunctionDescription functionDescription; + private final XFunctionCategory category; + private final Locale defaultLocale; + + public StarFunctionDescription(final DefaultFormulaContext defaultContext, final XComponentContext context, final XFunctionCategory category, final FunctionDescription functionDescription) + { + m_xContext = context; + this.category = category; + Locale locale; + try + { + functionDescription.getDisplayName(defaultContext.getLocalizationContext().getLocale()); + locale = defaultContext.getLocalizationContext().getLocale(); + } + catch (MissingResourceException e) + { + locale = Locale.ENGLISH; + } + this.defaultLocale = locale; + + this.functionDescription = functionDescription; + // use the last parameter of the PropertySetMixin constructor + // for your optional attributes if necessary. See the documentation + // of the PropertySetMixin helper for further information. + // Ensure that your attributes are initialized correctly! + m_prophlp = new PropertySetMixin(m_xContext, this, + new Type(com.sun.star.report.meta.XFunctionDescription.class), null); + } + + // com.sun.star.beans.XPropertySet: + public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() + { + return m_prophlp.getPropertySetInfo(); + } + + public void setPropertyValue(String aPropertyName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.setPropertyValue(aPropertyName, aValue); + } + + public Object getPropertyValue(String aPropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + return m_prophlp.getPropertyValue(aPropertyName); + } + + public void addPropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addPropertyChangeListener(aPropertyName, xListener); + } + + public void removePropertyChangeListener(String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removePropertyChangeListener(aPropertyName, xListener); + } + + public void addVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.addVetoableChangeListener(aPropertyName, xListener); + } + + public void removeVetoableChangeListener(String aPropertyName, com.sun.star.beans.XVetoableChangeListener xListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException + { + m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); + } + + // com.sun.star.report.meta.XFunctionDescription: + public com.sun.star.report.meta.XFunctionCategory getCategory() + { + return category; + } + + public String getName() + { + try + { + return functionDescription.getDisplayName(defaultLocale); + } + catch (Exception ex) + { + } + return "Missing function name for " + this.getClass().getName(); + } + + public String getDescription() + { + try + { + return functionDescription.getDescription(defaultLocale); + } + catch (Exception ex) + { + } + return "Missing function description for " + this.getClass().getName(); + } + + public String getSignature() + { + final int count = functionDescription.getParameterCount(); + final StringBuffer signature = new StringBuffer(getName()); + signature.append('('); + for (int i = 0; i < count; i++) + { + signature.append(functionDescription.getParameterDisplayName(i, defaultLocale)); + if (i != (count - 1)) + { + signature.append(';'); + } + } + signature.append(')'); + return signature.toString(); + } + + public com.sun.star.sheet.FunctionArgument[] getArguments() + { + int count = functionDescription.getParameterCount(); + final boolean infinite = functionDescription.isInfiniteParameterCount(); + if (infinite) + { + count = 30; + } + final FunctionArgument[] args = new FunctionArgument[count]; + for (int i = 0; i < args.length; i++) + { + final int pos = infinite ? 0 : i; + args[i] = new FunctionArgument(); + args[i].Description = functionDescription.getParameterDescription(pos, defaultLocale); + args[i].Name = functionDescription.getParameterDisplayName(pos, defaultLocale); + args[i].IsOptional = !functionDescription.isParameterMandatory(pos); + } + return args; + } + + public String createFormula(String[] arguments) throws com.sun.star.lang.DisposedException, com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception + { + final boolean infinite = functionDescription.isInfiniteParameterCount(); + final int count = functionDescription.getParameterCount(); + if (!infinite && arguments.length > count) + { + throw new com.sun.star.lang.IllegalArgumentException(); + } + + final StringBuffer formula = new StringBuffer(getName()); + formula.append('('); + for (int i = 0; i < arguments.length; ++i) + { + if (arguments[i].length() == 0) + { + break; + } + formula.append(arguments[i]); + if (i < (arguments.length - 1) && arguments[i + 1].length() != 0) + { + formula.append(';'); + } + } + formula.append(')'); + return formula.toString(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarReportData.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportData.java new file mode 100644 index 000000000000..77d65112c736 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportData.java @@ -0,0 +1,159 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.DataSource; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportData; + +public class StarReportData implements ReportData +{ + + private final DataSource dataSource; + private int currentRow; + private final int rowCount; + + public StarReportData(final DataSource dataSource) + throws org.libreoffice.report.DataSourceException + { + if (dataSource == null) + { + throw new NullPointerException(); + } + this.dataSource = dataSource; + this.currentRow = 0; + this.rowCount = dataSource.getRowCount(); + } + + public boolean setCursorPosition(final int row) throws DataSourceException + { + try + { + final boolean ret = dataSource.absolute(row); + if (ret) + { + currentRow = row; + } + return ret; + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to move cursor", e); + } + } + + public void close() + throws DataSourceException + { + try + { + dataSource.close(); + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to close datasource", e); + } + } + + public int getCursorPosition() + throws DataSourceException + { + return currentRow; + } + + /** + * This operation checks, whether a call to next will be likely to succeed. If + * there is a next data row, this should return true. + * + * @return + * @throws org.jfree.report.DataSourceException + * + */ + public boolean isAdvanceable() throws DataSourceException + { + return currentRow < rowCount; + } + + public boolean next() + throws DataSourceException + { + try + { + if (dataSource.next()) + { + currentRow += 1; + return true; + } + return false; + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to move cursor", e); + } + } + + public Object get(final int column) + throws DataSourceException + { + if (!isReadable()) + { + throw new DataSourceException("Failed to query column."); + } + + try + { + return dataSource.getObject(column + 1); + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to query column.", e); + } + } + + public int getColumnCount() + throws DataSourceException + { + try + { + return dataSource.getColumnCount(); + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to query column count.", e); + } + } + + public String getColumnName(final int column) + throws DataSourceException + { + try + { + return dataSource.getColumnName(column + 1); + } + catch (org.libreoffice.report.DataSourceException e) + { + throw new DataSourceException("Failed to query column name.", e); + } + } + + public boolean isReadable() throws DataSourceException + { + return currentRow > 0 && rowCount > 0; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java new file mode 100644 index 000000000000..fd7114aa4bdb --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java @@ -0,0 +1,116 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.DataSourceException; +import org.libreoffice.report.DataSourceFactory; + +import java.util.HashMap; + +import org.jfree.report.DataSet; +import org.jfree.report.ReportData; +import org.jfree.report.ReportDataFactory; +import org.jfree.report.ReportDataFactoryException; + + +public class StarReportDataFactory implements ReportDataFactory, Cloneable +{ + + private final DataSourceFactory backend; + + public StarReportDataFactory(DataSourceFactory backend) + { + this.backend = backend; + } + + /** + * Queries a datasource. The string 'query' defines the name of the query. The + * Parameterset given here may contain more data than actually needed. + *

+ * The dataset may change between two calls, do not assume anything! + * + * @param query + * @param parameters + * @return + */ + public ReportData queryData(final String query, final DataSet parameters) + throws ReportDataFactoryException + { + try + { + final HashMap map = new HashMap(); + final int count = parameters.getColumnCount(); + for (int i = 0; i < count; i++) + { + final Object o = parameters.get(i); + map.put(parameters.getColumnName(i), o); + } + return new StarReportData(backend.queryData(query, map)); + } + catch (DataSourceException dse) + { + String message = dse.getMessage(); + if (message.length() == 0) + { + message = "Failed to create report data wrapper"; + } + throw new ReportDataFactoryException(message, dse); + } + catch (org.jfree.report.DataSourceException e) + { + String message = e.getMessage(); + if (message.length() == 0) + { + message = "Failed to query data"; + } + throw new ReportDataFactoryException(message); + } + } + + public void open() + { + } + + public void close() + { + } + + /** + * Derives a freshly initialized report data factory, which is independend of + * the original data factory. Opening or Closing one data factory must not + * affect the other factories. + * + * @return + */ + public ReportDataFactory derive() + { + try + { + return (ReportDataFactory) clone(); + } + catch (CloneNotSupportedException e) + { + throw new IllegalStateException("Clone failed?"); + } + } + + public Object clone() throws CloneNotSupportedException + { + return super.clone(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarReportModule.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportModule.java new file mode 100644 index 000000000000..0e6b1e124641 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportModule.java @@ -0,0 +1,47 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.pentaho.reporting.libraries.base.boot.AbstractModule; +import org.pentaho.reporting.libraries.base.boot.ModuleInitializeException; +import org.pentaho.reporting.libraries.base.boot.SubSystem; + +public class StarReportModule extends AbstractModule +{ + + public StarReportModule() + throws ModuleInitializeException + { + loadModuleInfo(); + } + + /** + * Initializes the module. Use this method to perform all initial setup operations. This + * method is called only once in a modules lifetime. If the initializing cannot be + * completed, throw a ModuleInitializeException to indicate the error,. The module will + * not be available to the system. + * + * @param subSystem the subSystem. + * @throws org.jfree.base.modules.ModuleInitializeException + * if an error ocurred while initializing the module. + */ + public void initialize(final SubSystem subSystem) + throws ModuleInitializeException + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/configuration.properties b/reportbuilder/java/org/libreoffice/report/pentaho/configuration.properties new file mode 100644 index 000000000000..2453cf44e410 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/configuration.properties @@ -0,0 +1,147 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + + +## +# Do not modify the following lines. They connect this module to the central +# parser registry. +org.pentaho.reporting.libraries.resourceloader.factory.modules.org.libreoffice.report.pentaho.model.OfficeDocument.star=org.libreoffice.report.pentaho.parser.StarXmlFactoryModule +org.pentaho.reporting.libraries.resourceloader.factory.modules.org.libreoffice.report.pentaho.model.OfficeStylesCollection.star=org.libreoffice.report.pentaho.parser.StarStyleXmlFactoryModule +org.pentaho.reporting.libraries.resourceloader.factory.modules.org.libreoffice.report.pentaho.styles.StyleMapper.star=org.libreoffice.report.pentaho.styles.StyleMapperXmlFactoryModule + +## +# The known namespaces. +# +org.jfree.report.namespaces.star-rpt.Uri=http://openoffice.org/2005/report +org.jfree.report.namespaces.star-rpt.Default-Style=res://org/libreoffice/report/pentaho/star-rpt.css +org.jfree.report.namespaces.star-rpt.Prefix=rpt +org.jfree.report.namespaces.star-rpt.ClassAttr=style-name + +org.jfree.report.namespaces.star-office.Uri=http://openoffice.org/2004/office +org.jfree.report.namespaces.star-office.Default-Style=res://org/libreoffice/report/pentaho/star-office.css +org.jfree.report.namespaces.star-office.Prefix=office +org.jfree.report.namespaces.star-office.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-style.Uri=urn:oasis:names:tc:opendocument:xmlns:style:1.0 +org.jfree.report.namespaces.oasis-style.Default-Style=res://org/libreoffice/report/pentaho/oasis-style.css +org.jfree.report.namespaces.oasis-style.Prefix=style + +org.jfree.report.namespaces.oasis-table.Uri=urn:oasis:names:tc:opendocument:xmlns:table:1.0 +org.jfree.report.namespaces.oasis-table.Default-Style=res://org/libreoffice/report/pentaho/oasis-table.css +org.jfree.report.namespaces.oasis-table.Prefix=table +org.jfree.report.namespaces.oasis-table.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-draw.Uri=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 +org.jfree.report.namespaces.oasis-draw.Default-Style=res://org/libreoffice/report/pentaho/oasis-draw.css +org.jfree.report.namespaces.oasis-draw.Prefix=draw +org.jfree.report.namespaces.oasis-draw.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-chart.Uri=urn:oasis:names:tc:opendocument:xmlns:chart:1.0 +org.jfree.report.namespaces.oasis-chart.Default-Style=res://org/libreoffice/report/pentaho/oasis-chart.css +org.jfree.report.namespaces.oasis-chart.Prefix=chart +org.jfree.report.namespaces.oasis-chart.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-text.Uri=urn:oasis:names:tc:opendocument:xmlns:text:1.0 +org.jfree.report.namespaces.oasis-text.Default-Style=res://org/libreoffice/report/pentaho/oasis-text.css +org.jfree.report.namespaces.oasis-text.Prefix=text +org.jfree.report.namespaces.oasis-text.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-number.Uri=urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0 +org.jfree.report.namespaces.oasis-number.Default-Style=res://org/libreoffice/report/pentaho/oasis-number.css +org.jfree.report.namespaces.oasis-number.Prefix=number +org.jfree.report.namespaces.oasis-number.ClassAttr=style-name + +org.jfree.report.namespaces.oasis-form.Uri=urn:oasis:names:tc:opendocument:xmlns:form:1.0 +org.jfree.report.namespaces.oasis-form.Default-Style=res://org/libreoffice/report/pentaho/oasis-form.css +org.jfree.report.namespaces.oasis-form.Prefix=form + +# +# This defines a subset of the real XSL-FO standard. +org.jfree.report.namespaces.oasis-compat-fo.Uri=urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0 +org.jfree.report.namespaces.oasis-compat-fo.Default-Style=res://org/libreoffice/report/pentaho/xsl-fo.css +org.jfree.report.namespaces.oasis-compat-fo.Prefix=fo + +# +# This defines a subset of the real XSL-FO standard. +org.jfree.report.namespaces.oasis-compat-svg.Uri=urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0 +org.jfree.report.namespaces.oasis-compat-svg.Default-Style=res://org/libreoffice/report/pentaho/svg.css +org.jfree.report.namespaces.oasis-compat-svg.Prefix=svg + +# +# This defines a subset of the real XSL-FO standard. +org.jfree.report.namespaces.oasis-compat-smil.Uri=urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0 +org.jfree.report.namespaces.oasis-compat-smil.Default-Style=res://org/libreoffice/report/pentaho/smil.css +org.jfree.report.namespaces.oasis-compat-smil.Prefix=svg + +org.jfree.report.namespaces.xsl-fo.Uri=http://www.w3.org/1999/XSL/Format +org.jfree.report.namespaces.xsl-fo.Default-Style=res://org/libreoffice/report/pentaho/xsl-fo.css +org.jfree.report.namespaces.xsl-fo.Prefix=fo + +org.jfree.report.namespaces.svg.Uri=http://www.w3.org/2000/svg +org.jfree.report.namespaces.svg.Default-Style=res://org/libreoffice/report/pentaho/svg.css +org.jfree.report.namespaces.svg.Prefix=svg +org.jfree.report.namespaces.svg.ClassAttr=class +org.jfree.report.namespaces.svg.StyleAttr=style + +org.jfree.report.namespaces.xml-xlink.Uri=http://www.w3.org/1999/xlink +#org.jfree.report.namespaces.xml-xlink.Default-Style=res://org/libreoffice/report/pentaho/xml-xlink.css +org.jfree.report.namespaces.xml-xlink.Prefix=xlink + +# +# Tag-definition for the XML-writer. +# Prefix is 'org.libreoffice.report.pentaho.output.' +# +# Declare the namespaces (this is independent of the ones defined above ..) +# "namespace."= +org.libreoffice.report.pentaho.output.namespace.oasis-text=urn:oasis:names:tc:opendocument:xmlns:text:1.0 +org.libreoffice.report.pentaho.output.default.oasis-text=deny + +org.libreoffice.report.pentaho.output.namespace.oasis-config=urn:oasis:names:tc:opendocument:xmlns:config:1.0 +org.libreoffice.report.pentaho.output.default.oasis-config=allow + +# +# Next define the tags for which we want to customize the indent-behaviour +org.libreoffice.report.pentaho.output.tag.oasis-text.p=deny +org.libreoffice.report.pentaho.output.tag.oasis-text.section=allow +org.libreoffice.report.pentaho.output.tag.oasis-text.variable-decls=allow +org.libreoffice.report.pentaho.output.tag.oasis-text.variable-decl=allow + +org.libreoffice.report.pentaho.output.tag.oasis-config.config-item=deny + +org.libreoffice.report.pentaho.output.namespace.oasis-data=urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0 +org.libreoffice.report.pentaho.output.default.oasis-data=allow +org.libreoffice.report.pentaho.output.tag.oasis-data.text=deny +org.libreoffice.report.pentaho.output.tag.oasis-data.currency-symbol=deny +org.libreoffice.report.pentaho.output.tag.oasis-data.embedded-text=deny + +org.libreoffice.report.pentaho.output.namespace.oasis-draw=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 +org.libreoffice.report.pentaho.output.default.oasis-draw=deny + +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.FixedTextElement=org.libreoffice.report.pentaho.layoutprocessor.FixedTextLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.FormattedTextElement=org.libreoffice.report.pentaho.layoutprocessor.FormattedTextLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.ObjectOleElement=org.libreoffice.report.pentaho.layoutprocessor.ObjectOleLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.ImageElement=org.libreoffice.report.pentaho.layoutprocessor.ImageElementLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.TableCellElement=org.libreoffice.report.pentaho.layoutprocessor.TableCellLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeReport=org.libreoffice.report.pentaho.layoutprocessor.OfficeReportLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeGroup=org.libreoffice.report.pentaho.layoutprocessor.OfficeGroupLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeGroupSection=org.libreoffice.report.pentaho.layoutprocessor.OfficeGroupSectionLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.VariablesDeclarationSection=org.libreoffice.report.pentaho.layoutprocessor.VariablesDeclarationLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeDetailSection=org.libreoffice.report.pentaho.layoutprocessor.OfficeDetailLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeTableSection=org.libreoffice.report.pentaho.layoutprocessor.OfficeTableLayoutController +org.jfree.report.flow.structure.org.libreoffice.report.pentaho.model.OfficeGroupInstanceSection=org.libreoffice.report.pentaho.layoutprocessor.OfficeGroupInstanceSectionLayoutController diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpression.java b/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpression.java new file mode 100644 index 000000000000..d724010ef17a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpression.java @@ -0,0 +1,47 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.expressions; + +import org.libreoffice.report.DataRow; +import org.libreoffice.report.ReportExpression; + +public class SumExpression implements ReportExpression +{ + + private Object[] parameters; + + public SumExpression() + { + } + + public Object getParameters() + { + return parameters; + } + + public Object getValue(final DataRow row) + { + + return null; + } + + public void setParameters(final Object[] parameters) + { + this.parameters = parameters; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpressionMetaData.java b/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpressionMetaData.java new file mode 100644 index 000000000000..fbfa73c0d168 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/expressions/SumExpressionMetaData.java @@ -0,0 +1,69 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.expressions; + +import org.libreoffice.report.ReportExpressionMetaData; + +import java.util.Locale; + + +public class SumExpressionMetaData implements ReportExpressionMetaData +{ + + public String getDescription(final Locale l) + { + // todo implement me + return null; + } + + public String getDisplayName(final Locale l) + { + // todo implement me + return null; + } + + public String getName() + { + // todo implement me + return null; + } + + public int getParameterCount() + { + // todo implement me + return 0; + } + + public String getParameterDescription(final int param, final Locale locale) + { + // todo implement me + return null; + } + + public String getParameterDisplayName(final int param, final Locale locale) + { + // todo implement me + return null; + } + + public String getParameterName(final int param) + { + // todo implement me + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java new file mode 100644 index 000000000000..a690062bf83f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java @@ -0,0 +1,150 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.OfficeGroupSection; +import org.libreoffice.report.pentaho.model.ReportElement; + +import org.jfree.report.DataFlags; +import org.jfree.report.DataRow; +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.expressions.Expression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.AbstractLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Group; + +import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; + +/** + * Todo: Document me! + * + * @since 05.03.2007 + * @noinspection CloneableClassWithoutClone + */ +public abstract class AbstractReportElementLayoutController + extends AbstractLayoutController +{ + + public static final int NOT_STARTED = 0; + public static final int FINISHED = 2; + private int state; + + protected AbstractReportElementLayoutController() + { + } + + /** + * Advances the processing position. + * + * @param target the report target that receives generated events. + * @return the new layout controller instance representing the new state. + * + * @throws org.jfree.report.DataSourceException if there was a problem reading data from + * the datasource. + * @throws org.jfree.report.ReportProcessingException if there was a general problem during + * the report processing. + * @throws org.jfree.report.ReportDataFactoryException if a query failed. + */ + public LayoutController advance(final ReportTarget target) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + if (state != AbstractReportElementLayoutController.NOT_STARTED) + { + throw new IllegalStateException(); + } + + if (FormatValueUtility.shouldPrint(this, (ReportElement)getNode())) + { + // delegate to the handler .. + return delegateContentGeneration(target); + } + else + { + // There is no printable content at all. Set the state to FINISHED + return join(getFlowController()); + } + } + + public abstract boolean isValueChanged(); + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + final AbstractReportElementLayoutController alc = + (AbstractReportElementLayoutController) clone(); + alc.state = AbstractReportElementLayoutController.FINISHED; + return alc; + // That's how this method is implemented in classes of pentaho itself; + // I'm not sure why we do something different, but I haven't been able + // to pinpoint a bug attributable to the above implementation. + // final LayoutController parent = getParent(); + // if (parent == null) + // { + // // skip to the next step .. + // throw new IllegalStateException("There is no parent to join with. " + + // "This should not happen in a sane environment!"); + // } + + // return parent.join(getFlowController()); + } + + protected abstract LayoutController delegateContentGeneration(final ReportTarget target) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException; + + /** + * Checks, whether the layout controller would be advanceable. If this method + * returns true, it is generally safe to call the 'advance()' method. + * + * @return true, if the layout controller is advanceable, false otherwise. + */ + public boolean isAdvanceable() + { + return state != AbstractReportElementLayoutController.FINISHED; + } + + public int getState() + { + return state; + } + + protected void setState(final int state) + { + this.state = state; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FixedTextLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FixedTextLayoutController.java new file mode 100644 index 000000000000..1dd0a26174b7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FixedTextLayoutController.java @@ -0,0 +1,76 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.FixedTextElement; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.data.GlobalMasterRow; +import org.jfree.report.data.ReportDataRow; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportContext; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; +import org.jfree.report.structure.Section; + +/** + * Processes a fixed-text element of the OpenOffice reporting specifciation. + * The element itself contains a single paragraph which contains the content. + * After checking, whether this element should be printed, this layout + * controller simply delegates the dirty work to a suitable handler. + * + * @noinspection CloneableClassWithoutClone + * @since 05.03.2007 + */ +public class FixedTextLayoutController + extends AbstractReportElementLayoutController +{ + + public FixedTextLayoutController() + { + } + + public boolean isValueChanged() + { + final FlowController controller = getFlowController(); + final GlobalMasterRow masterRow = controller.getMasterRow(); + final ReportDataRow reportDataRow = masterRow.getReportDataRow(); + return reportDataRow.getCursor() == 0; + } + + protected LayoutController delegateContentGeneration(final ReportTarget target) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException + { + final FixedTextElement fte = (FixedTextElement) getNode(); + final Section content = fte.getContent(); + + final FlowController flowController = getFlowController(); + final ReportContext reportContext = flowController.getReportContext(); + final LayoutControllerFactory layoutControllerFactory = + reportContext.getLayoutControllerFactory(); + + final FixedTextLayoutController flc = (FixedTextLayoutController) clone(); + flc.setState(AbstractReportElementLayoutController.FINISHED); + return layoutControllerFactory.create(flowController, content, flc); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormatValueUtility.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormatValueUtility.java new file mode 100644 index 000000000000..f5f65db53d52 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormatValueUtility.java @@ -0,0 +1,363 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormattedTextElement; +import org.libreoffice.report.pentaho.model.OfficeGroupSection; +import org.libreoffice.report.pentaho.model.ReportElement; +import java.math.BigDecimal; + +import java.sql.Time; + +import java.text.SimpleDateFormat; + +import java.util.Date; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataRow; +import org.jfree.report.DataSourceException; +import org.jfree.report.data.DefaultDataFlags; +import org.jfree.report.expressions.Expression; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Group; + +import org.pentaho.reporting.libraries.formula.lvalues.ContextLookup; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; +import org.pentaho.reporting.libraries.formula.util.HSSFDateUtil; + +/** + * Creation-Date: 06.06.2007, 17:03:30 + * + */ +public class FormatValueUtility +{ + + private static final String BOOLEAN_VALUE = "boolean-value"; + private static final String STRING_VALUE = "string-value"; + public static final String VALUE_TYPE = "value-type"; + public static final String VALUE = "value"; + private static SimpleDateFormat dateFormat; + private static SimpleDateFormat timeFormat; + + private FormatValueUtility() + { + } + + public static String applyValueForVariable(final Object value, final AttributeMap variableSection) + { + String ret = null; + if (value instanceof Time) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "time"); + ret = formatTime((Time) value); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", ret); + } + else if (value instanceof java.sql.Date) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date"); + ret = formatDate((Date) value); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", ret); + } + else if (value instanceof Date) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); + ret = HSSFDateUtil.getExcelDate((Date) value, false, 2).toString(); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, ret); + } + else if (value instanceof Number) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); + } + else if (value instanceof Boolean) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "boolean"); + if (Boolean.TRUE.equals(value)) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE); + } + } + else if (value != null) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, String.valueOf(value)); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, ""); + } + return ret; + } + + public static void applyValueForCell(final Object value, final AttributeMap variableSection, final String valueType) + { + if (value instanceof Time) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", formatTime((Time) value)); + } + else if (value instanceof java.sql.Date) + { + if ("float".equals(valueType))//@see http://qa.openoffice.org/issues/show_bug.cgi?id=108954 + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 2).toString()); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value)); + } + } + else if (value instanceof Date) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 2).toString()); + } + else if (value instanceof BigDecimal) + { + if ("date".equals(valueType)) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate(HSSFDateUtil.getJavaDate((BigDecimal) value, false, 0))); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); + } + } + else if (value instanceof Number) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); + } + else if (value instanceof Boolean) + { + if ("float".equals(valueType)) + { + float fvalue = Boolean.TRUE.equals(value) ? 1 : 0; + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(fvalue)); + } + else + { + if (Boolean.TRUE.equals(value)) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE); + } + } + } + else if (value != null) + { + try + { + final Float number = Float.valueOf(String.valueOf(value)); + applyValueForCell(number, variableSection, valueType); + return; + } + catch (NumberFormatException e) + { + } + if (!"string".equals(valueType)) + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); + } + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, String.valueOf(value)); + } + else + { + variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, ""); + } + } + + private static synchronized String formatDate(final Date date) + { + if (dateFormat == null) + { + dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'S'Z'"); + } + return dateFormat.format(date); + } + + private static synchronized String formatTime(final Date date) + { + if (timeFormat == null) + { + timeFormat = new SimpleDateFormat("'PT'HH'H'mm'M'ss'S'"); + } + return timeFormat.format(date); + } + + public static DataFlags computeDataFlag(final FormattedTextElement element, + final FlowController flowController) + throws DataSourceException + { + // here it is relatively easy. We have to evaluate the expression, convert + // the result into a string, and print that string. + final FormulaExpression formulaExpression = element.getValueExpression(); + final Object result = LayoutControllerUtil.evaluateExpression(flowController, element, formulaExpression); + if (result == null) + { + // ignore it. Ignoring it is much better than printing 'null'. + // LOGGER.debug("Formula '" + formulaExpression.getFormula() + "' evaluated to null."); + return null; + } + else if (result instanceof DataFlags) + { + return (DataFlags) result; + } + else + { + return new DefaultDataFlags(null, result, true); + } + } + + public static boolean shouldPrint(final LayoutController ref, final ReportElement text) + throws DataSourceException + { + final boolean isValueChanged; + if (ref instanceof AbstractReportElementLayoutController) + isValueChanged=((AbstractReportElementLayoutController)ref).isValueChanged(); + else if (ref instanceof TableCellLayoutController) + isValueChanged=((TableCellLayoutController)ref).isValueChanged(); + else + throw new AssertionError("org.libreoffice.report.pentaho.layoutprocessor.FormatValueUtility.shouldPrint expects an implementor of isValueChanged as first argument"); + + // Tests we have to perform: + // 1. If repeated values are supposed to be printed, then print. + // (this is always the case for static text and static elements) + // 2. If value changed, then print. + // 3. If (printing should be forced on group change AND group changed), then print + if ( !( isValueChanged + || text.isPrintRepeatedValues() + || ( text.isPrintWhenGroupChange() && isGroupChanged(ref) ))) + { + return false; + } + + final Expression dc = text.getDisplayCondition(); + if (dc != null) + { + final Object o = LayoutControllerUtil.evaluateExpression(ref.getFlowController(), text, dc); + if (Boolean.FALSE.equals(o)) + { + return false; + } + } + + return true; + } + + public static boolean isGroupChanged(LayoutController ref) + { + // search the group. + final SectionLayoutController slc = findGroup(ref); + if (slc == null) + { + // Always print the content of the report header and footer and + // the page header and footer. + return true; + } + + // we are in the first iteration, so yes, the group has changed recently. + return slc.getIterationCount() == 0; + } + + public static SectionLayoutController findGroup(LayoutController ref) + { + LayoutController parent = ref.getParent(); + boolean skipNext = false; + while (parent != null) + { + if (!(parent instanceof SectionLayoutController)) + { + parent = parent.getParent(); + } + else + { + final SectionLayoutController slc = (SectionLayoutController) parent; + final Element element = slc.getElement(); + if (element instanceof OfficeGroupSection) + { + // This is a header or footer. So we take the next group instead. + skipNext = true; + parent = parent.getParent(); + } + else if (!(element instanceof Group)) + { + parent = parent.getParent(); + } + else if (skipNext) + { + skipNext = false; + parent = parent.getParent(); + } + else + { + return (SectionLayoutController) parent; + } + } + } + return null; + } + + public static boolean isReferenceChanged(LayoutController ref, final LValue lValue) + { + if (lValue instanceof ContextLookup) + { + final ContextLookup rval = (ContextLookup) lValue; + final String s = rval.getName(); + final DataRow view = ref.getFlowController().getMasterRow().getGlobalView(); + try + { + final DataFlags flags = view.getFlags(s); + if (flags != null && flags.isChanged()) + { + return true; + } + } + catch (DataSourceException e) + { + // ignore .. assume that the reference has not changed. + } + } + final LValue[] childValues = lValue.getChildValues(); + for (int i = 0; i < childValues.length; i++) + { + final LValue value = childValues[i]; + if (isReferenceChanged(ref, value)) + { + return true; + } + } + return false; + } + +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormattedTextLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormattedTextLayoutController.java new file mode 100644 index 000000000000..dcc153c71962 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/FormattedTextLayoutController.java @@ -0,0 +1,219 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormattedTextElement; +import org.libreoffice.report.pentaho.model.OfficeDocument; +import org.libreoffice.report.pentaho.model.OfficeStyle; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.formula.Formula; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; +import org.pentaho.reporting.libraries.formula.parser.ParseException; + +/** + * Todo: Document me! + * + * @since 05.03.2007 + */ +public class FormattedTextLayoutController + extends AbstractReportElementLayoutController +{ + + private static final Log LOGGER = LogFactory.getLog(FormattedTextLayoutController.class); + + public FormattedTextLayoutController() + { + } + + private VariablesCollection getVariablesCollection() + { + LayoutController parent = getParent(); + while (parent != null) + { + if (parent instanceof OfficeRepeatingStructureLayoutController) + { + final OfficeRepeatingStructureLayoutController orslc = + (OfficeRepeatingStructureLayoutController) parent; + if (orslc.isNormalFlowProcessing()) + { + return null; + } + + return orslc.getVariablesCollection(); + } + parent = parent.getParent(); + } + return null; + } + + public boolean isValueChanged() + { + try + { + final FormattedTextElement element = (FormattedTextElement) getNode(); + final FormulaExpression formulaExpression = element.getValueExpression(); + final Formula formula = formulaExpression.getCompiledFormula(); + final LValue lValue = formula.getRootReference(); + return FormatValueUtility.isReferenceChanged(this, lValue); + } + catch (final ParseException e) + { + LOGGER.debug("Parse Exception", e); + return false; + } + } + + protected LayoutController delegateContentGeneration(final ReportTarget target) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException + { + final FormattedTextElement element = (FormattedTextElement) getNode(); + final VariablesCollection vc = getVariablesCollection(); + if (vc != null) + { + final String name = vc.addVariable(element); + final AttributeMap variablesGet = new AttributeMap(); + variablesGet.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, + Element.TYPE_ATTRIBUTE, "variable-get"); + variablesGet.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, + Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TEXT_NS); + variablesGet.setAttribute(OfficeNamespaces.TEXT_NS, "name", name); + + final String dataStyleName = computeValueStyle(); + if (dataStyleName != null) + { + variablesGet.setAttribute(OfficeNamespaces.STYLE_NS, "data-style-name", dataStyleName); + } + + final String valueType = computeValueType(); + variablesGet.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, valueType); + target.startElement(variablesGet); + + target.endElement(variablesGet); + } + else + { + final DataFlags df = FormatValueUtility.computeDataFlag(element, getFlowController()); + if (df != null) + { + if (df.getValue() instanceof String) + { + target.processContent(df); + } + else //@see http://qa.openoffice.org/issues/show_bug.cgi?id=108954 + { + Element cell = getParentTableCell(); + if (cell != null && "string".equals(cell.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE))) + { + target.processContent(df); + } + } + } + } + + return join(getFlowController()); + } + + private OfficeDocument getDocument() + { + LayoutController parent = getParent(); + while (parent != null) + { + final Object node = parent.getNode(); + if (node instanceof OfficeDocument) + { + return (OfficeDocument) node; + } + parent = parent.getParent(); + } + return null; + } + + private Element getParentTableCell() + { + LayoutController parent = getParent(); + while (parent != null) + { + if (parent instanceof TableCellLayoutController) + { + final TableCellLayoutController cellController = (TableCellLayoutController) parent; + return cellController.getElement(); + } + parent = parent.getParent(); + } + return null; + } + + private String computeValueStyle() + { + final Element tce = getParentTableCell(); + if (tce == null) + { + return null; + } + + final String cellStyleName = (String) tce.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + if (cellStyleName == null) + { + return null; + } + final OfficeDocument document = getDocument(); + if (document == null) + { + return null; + } + + final OfficeStyle style = document.getStylesCollection().getStyle("table-cell", cellStyleName); + return (String) style.getAttribute(OfficeNamespaces.STYLE_NS, "data-style-name"); + } + + private String computeValueType() + { + final Element tce = getParentTableCell(); + if (tce == null) + { + // NO particular format means: Fallback to string and hope and pray .. + throw new IllegalStateException("A formatted text element must be a child of a Table-Cell."); + } + + final String type = (String) tce.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); + if (type == null) + { + LOGGER.error("The Table-Cell does not have a office:value attribute defined. Your content will be messed up."); + return "string"; + } + return type; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementContext.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementContext.java new file mode 100644 index 000000000000..91cf767eab2d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementContext.java @@ -0,0 +1,81 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +/** + * Todo: Document me! + * + * @since 30.03.2007 + */ +public class ImageElementContext +{ + + private final int colSpan; + private final int rowSpan; + private String[] rowStyles; + private String[] colStyles; + + public ImageElementContext(final int colSpan, final int rowSpan) + { + this.colSpan = colSpan; + this.rowSpan = rowSpan; + this.colStyles = new String[colSpan]; + this.rowStyles = new String[rowSpan]; + } + + public int getColSpan() + { + return colSpan; + } + + public int getRowSpan() + { + return rowSpan; + } + + public String[] getRowStyles() + { + return rowStyles; + } + + public String[] getColStyles() + { + return colStyles; + } + + public void setRowStyle(final int pos, final String styleName) + { + rowStyles[pos] = styleName; + } + + public void setColStyle(final int pos, final String styleName) + { + colStyles[pos] = styleName; + } + + public String getRowStyle(final int pos) + { + return rowStyles[pos]; + } + + public String getColStyle(final int pos) + { + return colStyles[pos]; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementLayoutController.java new file mode 100644 index 000000000000..bd5d529553d5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ImageElementLayoutController.java @@ -0,0 +1,311 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ImageElement; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.data.GlobalMasterRow; +import org.jfree.report.data.ReportDataRow; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; +import org.jfree.report.util.TextUtilities; + +import org.pentaho.reporting.libraries.base.util.ObjectUtilities; +import org.pentaho.reporting.libraries.formula.Formula; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; +import org.pentaho.reporting.libraries.formula.parser.ParseException; + +/** + * Produces an image. The image-structures itself (draw:frame and so on) are not generated here. This element produces a + * place-holder element and relies on the output target to compute a sensible position for the element. The report + * definition does not give any hints about the size of the image, so we have to derive this from the surrounding + * context. + * + * @since 05.03.2007 + */ +public class ImageElementLayoutController + extends AbstractReportElementLayoutController +{ + + private static final Log LOGGER = LogFactory.getLog(ImageElementLayoutController.class); + private ImageElementContext context; + + public ImageElementLayoutController() + { + } + + protected LayoutController delegateContentGeneration(final ReportTarget target) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException + { + final ImageElement imageElement = (ImageElement) getNode(); + final FormulaExpression formulaExpression = imageElement.getFormula(); + if (formulaExpression == null) + { + // A static image is easy. At least at this level. Dont ask about the weird things we have to do in the + // output targets ... + final String linkTarget = imageElement.getImageData(); + generateImage(target, linkTarget, imageElement.getScaleMode(), imageElement.isPreserveIRI()); + } + else + { + final Object value = + LayoutControllerUtil.evaluateExpression(getFlowController(), imageElement, formulaExpression); + generateImage(target, value, imageElement.getScaleMode(), imageElement.isPreserveIRI()); + } + return join(getFlowController()); + } + + private void generateImage(final ReportTarget target, + final Object linkTarget, + final String scale, + final boolean preserveIri) + throws ReportProcessingException, DataSourceException + { + if (linkTarget == null) + { + return; + } + + final AttributeMap image = new AttributeMap(); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, JFreeReportInfo.REPORT_NAMESPACE); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.IMAGE); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.SCALE, scale); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.PRESERVE_IRI, String.valueOf(preserveIri)); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "image-context", createContext()); + image.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.IMAGE_DATA, linkTarget); + target.startElement(image); + target.endElement(image); + } + + protected ImageElementContext createContext() + { + if (context == null) + { + + // Step 1: Find the parent cell. + final LayoutController cellController = findParentCell(); + if (cellController == null) + { + LOGGER.warn("Image is not contained in a table. Unable to calculate the image-size."); + return null; + } + final Element tableCell = (Element) cellController.getNode(); + final int rowSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-rows-spanned"), 1); + final int colSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-columns-spanned"), 1); + if (rowSpan < 1 || colSpan < 1) + { + LOGGER.warn("Rowspan or colspan for image-size calculation was invalid."); + return null; + } + + final LayoutController rowController = cellController.getParent(); + if (rowController == null) + { + LOGGER.warn("Table-Cell has no parent. Unable to calculate the image-size."); + return null; + } + final Section tableRow = (Section) rowController.getNode(); + // we are now making the assumption, that the row is a section, that contains the table-cell. + // This breaks the ability to return nodes or to construct reports on the fly, but the OO-report format + // is weird anyway and wont support such advanced techniques for the next few centuries .. + final int columnPos = findNodeInSection(tableRow, tableCell, OfficeToken.COVERED_TABLE_CELL); + if (columnPos == -1) + { + LOGGER.warn("Table-Cell is not a direct child of the table-row. Unable to calculate the image-size."); + return null; + } + + final LayoutController tableController = rowController.getParent(); + if (tableController == null) + { + LOGGER.warn("Table-Row has no Table. Unable to calculate the image-size."); + return null; + } + + final Section table = (Section) tableController.getNode(); + // ok, we got a table, so as next we have to search for the columns now. + final Section columns = (Section) table.findFirstChild(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS); + if (columns.getNodeCount() <= columnPos + colSpan) + { + // the colspan is to large. The table definition is therefore invalid. We do not try to fix this. + LOGGER.warn( + "The Table's defined columns do not match the col-span or col-position. Unable to calculate the image-size."); + return null; + } + + final ImageElementContext context = new ImageElementContext(colSpan, rowSpan); + addColumnStyles(context, columns, columnPos, colSpan); + // finally search the styles for the row now. + final int rowPos = findNodeInSection(table, tableRow, null); + if (rowPos == -1) + { + LOGGER.warn("Table-Cell is not a direct child of the table-row. Unable to calculate the image-size."); + return null; + } + + addRowStyles(context, table, rowPos, rowSpan); + this.context = context; + } + return this.context; + } + + private int findNodeInSection(final Section tableRow, + final Element tableCell, + final String secondType) + { + int retval = 0; + final Node[] nodes = tableRow.getNodeArray(); + final String namespace = tableCell.getNamespace(); + final String type = tableCell.getType(); + for (final Node node : nodes) + { + if (!(node instanceof Element)) + { + continue; + } + final Element child = (Element) node; + if (!ObjectUtilities.equal(child.getNamespace(), namespace) || (!ObjectUtilities.equal(child.getType(), type) && (secondType == null || !ObjectUtilities.equal(child.getType(), secondType)))) + { + continue; + } + + if (node == tableCell) + { + return retval; + } + retval += 1; + } + return -1; + } + + private LayoutController findParentCell() + { + LayoutController parent = getParent(); + while (parent != null) + { + final Object node = parent.getNode(); + if (node instanceof Element) + { + final Element element = (Element) node; + if (OfficeNamespaces.TABLE_NS.equals(element.getNamespace()) && "table-cell".equals(element.getType())) + { + return parent; + } + } + parent = parent.getParent(); + } + return null; + } + + public boolean isValueChanged() + { + final ImageElement imageElement = (ImageElement) getNode(); + final FormulaExpression formulaExpression = imageElement.getFormula(); + if (formulaExpression == null) + { + final FlowController controller = getFlowController(); + final GlobalMasterRow masterRow = controller.getMasterRow(); + final ReportDataRow reportDataRow = masterRow.getReportDataRow(); + return reportDataRow.getCursor() == 0; + } + + try + { + final Formula formula = formulaExpression.getCompiledFormula(); + final LValue lValue = formula.getRootReference(); + return FormatValueUtility.isReferenceChanged(this, lValue); + } + catch (ParseException e) + { + return false; + } + } + + void addColumnStyles(final ImageElementContext context, final Section columns, final int columnPos, final int colSpan) + { + final Node[] columnDefs = columns.getNodeArray(); + int columnCounter = 0; + for (Node columnDef : columnDefs) + { + final Element column = (Element) columnDef; + + if (!ObjectUtilities.equal(column.getNamespace(), OfficeNamespaces.TABLE_NS) || !ObjectUtilities.equal(column.getType(), OfficeToken.TABLE_COLUMN)) + { + continue; + } + if (columnCounter >= columnPos) + { + final String colStyle = (String) column.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + context.setColStyle(columnCounter - columnPos, colStyle); + } + + columnCounter += 1; + + if (columnCounter >= (columnPos + colSpan)) + { + break; + } + + } + } + + void addRowStyles(final ImageElementContext context, final Section table, final int rowPos, final int rowSpan) + { + final Node[] rows = table.getNodeArray(); + int rowCounter = 0; + for (Node row1 : rows) + { + final Element row = (Element) row1; + + if (!ObjectUtilities.equal(row.getNamespace(), OfficeNamespaces.TABLE_NS) || !ObjectUtilities.equal(row.getType(), OfficeToken.TABLE_ROW)) + { + continue; + } + if (rowCounter >= rowPos) + { + final String rowStyle = (String) row.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + context.setRowStyle(rowCounter - rowPos, rowStyle); + } + + rowCounter += 1; + + if (rowCounter >= (rowPos + rowSpan)) + { + break; + } + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ObjectOleLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ObjectOleLayoutController.java new file mode 100644 index 000000000000..3a5c31dd1435 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/ObjectOleLayoutController.java @@ -0,0 +1,112 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.SDBCReportDataFactory; +import org.libreoffice.report.pentaho.model.ObjectOleElement; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataRow; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.structure.Element; + +public class ObjectOleLayoutController extends AbstractReportElementLayoutController +{ + + public ObjectOleLayoutController() + { + } + + public boolean isValueChanged() + { + final ObjectOleElement element = (ObjectOleElement) getNode(); + final List masterfields = element.getMasterfields(); + final DataRow view = getFlowController().getMasterRow().getGlobalView(); + for (final Iterator iter = masterfields.iterator(); iter.hasNext();) + { + final String master = (String) iter.next(); + try + { + final DataFlags flags = view.getFlags(master); + if (flags != null && flags.isChanged()) + { + return true; + } + } + catch (DataSourceException e) + { + // ignore .. assume that the reference has not changed. + } + } + return false; + } + + protected LayoutController delegateContentGeneration(final ReportTarget target) throws ReportProcessingException, ReportDataFactoryException, DataSourceException + { + final ObjectOleElement element = (ObjectOleElement) getNode(); + final String url = element.getUrl(); + if (url != null) + { + final AttributeMap ole = new AttributeMap(); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, JFreeReportInfo.REPORT_NAMESPACE); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.OBJECT_OLE); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "href", url); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "class-id", element.getClassid()); + final List masterfields = element.getMasterfields(); + final List values = new ArrayList(); + final DataRow view = getFlowController().getMasterRow().getGlobalView(); + for (final Iterator iter = masterfields.iterator(); iter.hasNext();) + { + final String master = iter.next(); + try + { + final DataFlags flags = view.getFlags(master); + if (flags != null) + { + values.add(flags.getValue()); + } + } + catch (DataSourceException e) + { + // ignore .. assume that the reference has not changed. + } + } + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_COLUMNS, masterfields); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_VALUES, values); + ole.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.DETAIL_COLUMNS, element.getDetailfields()); + + target.startElement(ole); + target.endElement(ole); + } + + return join(getFlowController()); + } +} + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java new file mode 100644 index 000000000000..40dd5c0488f6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java @@ -0,0 +1,150 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.VariablesDeclarationSection; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportData; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.data.GlobalMasterRow; +import org.jfree.report.data.ReportDataRow; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.ElementLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; + +/** + * Creation-Date: 11.04.2007, 11:04:02 + * + */ +public class OfficeDetailLayoutController extends SectionLayoutController +{ + + public static final int STATE_PROCESS_VARIABLES = 2; + public static final int STATE_PROCESS_NORMAL_FLOW = 3; + private boolean waitForJoin; + private int state; + + public OfficeDetailLayoutController() + { + } + + /** + * Initializes the layout controller. This method is called exactly once. It + * is the creators responsibility to call this method. + *

+ * Calling initialize after the first advance must result in a + * IllegalStateException. + * + * @param node the currently processed object or layout node. + * @param flowController the current flow controller. + * @param parent the parent layout controller that was responsible for + * instantiating this controller. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public void initialize(final Object node, + final FlowController flowController, + final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + super.initialize(node, flowController, parent); + state = OfficeDetailLayoutController.STATE_PROCESS_VARIABLES; + } + + /** + * This method is called for each newly instantiated layout controller. The returned layout controller instance should + * have a processing state of either 'OPEN' or 'FINISHING' depending on whether there is any content or any child + * nodes to process. + * + * @param target the report target that receives generated events. + * @return the new layout controller instance representing the new state. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + protected LayoutController startElement(final ReportTarget target) + throws DataSourceException, ReportProcessingException, ReportDataFactoryException + { + final FlowController fc = getFlowController(); + final GlobalMasterRow masterRow = fc.getMasterRow(); + final ReportDataRow reportDataRow = masterRow.getReportDataRow(); + final ReportData reportData = reportDataRow.getReportData(); + if (!reportData.isReadable()) + { + reportData.isReadable(); + // If this report has no data, then do not print the detail section. The detail section + // is the only section that behaves this way, and for now this is only done in the OO-implementation + final SectionLayoutController derived = (SectionLayoutController) clone(); + derived.setProcessingState(ElementLayoutController.FINISHED); + derived.setFlowController(fc); + return derived; + } + + if (state == OfficeDetailLayoutController.STATE_PROCESS_VARIABLES) + { + final VariablesDeclarationSection variables = new VariablesDeclarationSection(); + final OfficeDetailLayoutController controller = (OfficeDetailLayoutController) clone(); + controller.state = OfficeDetailLayoutController.STATE_PROCESS_NORMAL_FLOW; + controller.waitForJoin = true; + return processChild(controller, variables, fc); + } + + return super.startElement(target); + } + + protected void resetSectionForRepeat() + { + super.resetSectionForRepeat(); + state = STATE_PROCESS_VARIABLES; + } + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + { + if (waitForJoin) + { + final OfficeDetailLayoutController derived = (OfficeDetailLayoutController) clone(); + derived.setProcessingState(ElementLayoutController.NOT_STARTED); + derived.setFlowController(flowController); + derived.waitForJoin = false; + return derived; + } + return super.join(flowController); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java new file mode 100644 index 000000000000..ad402e03a994 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java @@ -0,0 +1,170 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.OfficeGroupSection; +import org.libreoffice.report.pentaho.model.VariablesDeclarationSection; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.expressions.Expression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportContext; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.ElementLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; + +/** + * Creation-Date: 25.07.2007, 14:50:45 + * + */ +public class OfficeGroupInstanceSectionLayoutController extends SectionLayoutController +{ + + public static final int STATE_PROCESS_VARIABLES = 2; + public static final int STATE_PROCESS_NORMAL_FLOW = 3; + private int state; + private boolean waitForJoin; + + public OfficeGroupInstanceSectionLayoutController() + { + } + + public void initialize(final Object node, final FlowController flowController, final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, ReportProcessingException + { + super.initialize(node, flowController, parent); + state = STATE_PROCESS_VARIABLES; + } + + protected LayoutController processContent(final ReportTarget target) + throws DataSourceException, ReportProcessingException, ReportDataFactoryException + { + if (state == OfficeGroupInstanceSectionLayoutController.STATE_PROCESS_VARIABLES) + { + // todo: Fill the variables section with something sensible .. + final VariablesDeclarationSection variables = new VariablesDeclarationSection(); + final OfficeGroupInstanceSectionLayoutController controller = + (OfficeGroupInstanceSectionLayoutController) clone(); + controller.state = + OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + controller.waitForJoin = true; + return processChild(controller, variables, getFlowController()); + } + return super.processContent(target); + } + + // isDisplayable is private in version 0.9.1, so until the upgrade we keep this copy of the method + // todo: Delete it unce the sun-cvs contains version 0.9.2. + protected LayoutController processChild(final SectionLayoutController derived, + final Node node, + final FlowController flowController) + throws DataSourceException, ReportProcessingException, + ReportDataFactoryException + { + final ReportContext reportContext = flowController.getReportContext(); + final LayoutControllerFactory layoutControllerFactory = reportContext.getLayoutControllerFactory(); + if (isDisplayable(node)) + { + derived.setProcessingState(ElementLayoutController.WAITING_FOR_JOIN); + return layoutControllerFactory.create(flowController, node, derived); + } + else + { + derived.setProcessingState(ElementLayoutController.WAITING_FOR_JOIN); + final LayoutController childLc = layoutControllerFactory.create(flowController, node, derived); + return LayoutControllerUtil.skipInvisibleElement(childLc); + } + } + + protected boolean isDisplayable(final Node node) throws DataSourceException + { + if (!(node instanceof OfficeGroupSection)) + { + return _isDisplayable(node); + } + + final OfficeGroupSection section = (OfficeGroupSection) node; + return !section.isRepeatSection() && _isDisplayable(node); + } + + protected boolean _isDisplayable(final Node node) + throws DataSourceException + { + // temp method until the pending upgrade to 0.9.2. Later we just call super.isDisplayable(..) instead. + if (!node.isEnabled()) + { + return false; + } + + final Expression expression = node.getDisplayCondition(); + if (expression == null) + { + return true; + } + + final Object result = LayoutControllerUtil.evaluateExpression(getFlowController(), node, expression); + return Boolean.TRUE.equals(result); + } + + protected void resetSectionForRepeat() + { + super.resetSectionForRepeat(); + state = STATE_PROCESS_VARIABLES; + } + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + { + if (waitForJoin) + { + final OfficeGroupInstanceSectionLayoutController derived = (OfficeGroupInstanceSectionLayoutController) clone(); + derived.setProcessingState(ElementLayoutController.OPENED); + derived.setFlowController(flowController); + derived.waitForJoin = false; + return derived; + } + return super.join(flowController); + } + + protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) + throws DataSourceException + { + final AttributeMap map = new AttributeMap(super.computeAttributes(fc, element, target)); + map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "iteration-count", getIterationCount()); + map.makeReadOnly(); + return map; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java new file mode 100644 index 000000000000..293a6dbdd001 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java @@ -0,0 +1,195 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.OfficeGroup; +import org.libreoffice.report.pentaho.model.OfficeGroupSection; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.ElementLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; + +/** + * Todo: Document me! + * + * @since 15.03.2007 + */ +public class OfficeGroupLayoutController extends SectionLayoutController + implements OfficeRepeatingStructureLayoutController +{ + + public static final int STATE_PROCESS_REPEATING_HEADER = 0; + public static final int STATE_PROCESS_REPEATING_FOOTER = 1; + public static final int STATE_PROCESS_NORMAL_FLOW = 3; + private boolean waitForJoin; + private int state; + private VariablesCollection variablesCollection; + private boolean repeatHeader; + private boolean repeatFooter; + + public OfficeGroupLayoutController() + { + } + + /** + * Initializes the layout controller. This method is called exactly once. It + * is the creators responsibility to call this method. + *

+ * Calling initialize after the first advance must result in a + * IllegalStateException. + * + * @param node the currently processed object or layout node. + * @param flowController the current flow controller. + * @param parent the parent layout controller that was responsible for + * instantiating this controller. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public void initialize(final Object node, + final FlowController flowController, + final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + super.initialize(node, flowController, parent); + state = OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER; + variablesCollection = new VariablesCollection(computeVariablesPrefix()); + + + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection header = group.getHeader(); + repeatHeader = (header != null && header.isRepeatSection()); + + final OfficeGroupSection footer = group.getFooter(); + repeatFooter = (footer != null && footer.isRepeatSection()); + } + + protected LayoutController processContent(final ReportTarget target) + throws DataSourceException, ReportProcessingException, + ReportDataFactoryException + { + if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_HEADER) + { + + final OfficeGroupLayoutController controller = + (OfficeGroupLayoutController) clone(); + controller.state = + OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER; + + if (!repeatHeader) + { + return controller; + } + + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection header = group.getHeader(); + controller.waitForJoin = true; + return processChild(controller, header, getFlowController()); + } + + if (state == OfficeGroupLayoutController.STATE_PROCESS_REPEATING_FOOTER) + { + + final OfficeGroupLayoutController controller = + (OfficeGroupLayoutController) clone(); + controller.state = OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + + if (!repeatFooter) + { + return controller; + } + + final OfficeGroup group = (OfficeGroup) getElement(); + final OfficeGroupSection footer = group.getFooter(); + controller.waitForJoin = true; + return processChild(controller, footer, getFlowController()); + } + + return super.processContent(target); + } + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + { + if (waitForJoin) + { + final OfficeGroupLayoutController derived = (OfficeGroupLayoutController) clone(); + derived.setProcessingState(ElementLayoutController.OPENED); + derived.setFlowController(flowController); + derived.waitForJoin = false; + return derived; + } + return super.join(flowController); + } + + public boolean isNormalFlowProcessing() + { + return state == OfficeGroupLayoutController.STATE_PROCESS_NORMAL_FLOW; + } + + private String computeVariablesPrefix() + { + int count = 0; + LayoutController lc = this; + while (lc != null) + { + if (lc instanceof OfficeGroupLayoutController) + { + count++; + } + lc = lc.getParent(); + } + return "auto_group_" + count + "_"; + } + + public VariablesCollection getVariablesCollection() + { + return variablesCollection; + } + + protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) + throws DataSourceException + { + final AttributeMap map = new AttributeMap(super.computeAttributes(fc, element, target)); + final String value = String.valueOf(repeatHeader || repeatFooter); + map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer", value); + map.makeReadOnly(); + return map; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java new file mode 100644 index 000000000000..a709bdce9ec4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java @@ -0,0 +1,99 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.model.OfficeGroupSection; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.ElementLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; + +/** + * This layoutcontroller simply checks, whether the parent layout controller + * is a OfficeGroupLayoutController and whether this layout controller is + * processing the normal flow or an repeating section. If a repeating section + * is being processed, an marker attribute is added to the element's call + * to OutputProcessor.startElement() and OutputProcessor.endElement(). + * + * @since 19.03.2007 + */ +public class OfficeGroupSectionLayoutController extends SectionLayoutController +{ + + public OfficeGroupSectionLayoutController() + { + } + + protected LayoutController startElement(final ReportTarget target) + throws DataSourceException, ReportProcessingException, ReportDataFactoryException + { + final OfficeGroupSection section = (OfficeGroupSection) getElement(); + if (!section.isRepeatSection()) + { + return super.startElement(target); + } + + final LayoutController controller = getParent(); + if (!(controller instanceof OfficeGroupLayoutController)) + { + return super.startElement(target); + } + final OfficeGroupLayoutController oglc = (OfficeGroupLayoutController) controller; + if (!oglc.isNormalFlowProcessing()) + { + return super.startElement(target); + } + + // Skip the processing if the section is a repeating header or footer and we are processing the normal flow .. + final ElementLayoutController clone = (ElementLayoutController) this.clone(); + clone.setProcessingState(ElementLayoutController.FINISHED); + return clone; + } + + protected AttributeMap computeAttributes(final FlowController fc, + final Element element, + final ReportTarget target) + throws DataSourceException + { + final AttributeMap attrs = super.computeAttributes(fc, element, target); + final LayoutController controller = getParent(); + if (!(controller instanceof OfficeGroupLayoutController)) + { + return attrs; + } + final OfficeGroupLayoutController oglc = (OfficeGroupLayoutController) controller; + if (oglc.isNormalFlowProcessing()) + { + return attrs; + } + + final AttributeMap retval = new AttributeMap(attrs); + retval.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section", OfficeToken.TRUE); + retval.makeReadOnly(); + return retval; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java new file mode 100644 index 000000000000..069ec7dfa298 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java @@ -0,0 +1,47 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; + +/** + * Todo: Document Me + * + */ +public class OfficePageSectionLayoutController extends SectionLayoutController +{ + + public OfficePageSectionLayoutController() + { + } + + protected AttributeMap computeAttributes(final FlowController flowController, final Element element, final ReportTarget reportTarget) throws DataSourceException + { + final AttributeMap map = new AttributeMap(super.computeAttributes(flowController, element, reportTarget)); + map.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role", "spreadsheet-section"); + map.makeReadOnly(); + return map; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java new file mode 100644 index 000000000000..a07aaf9a2b5c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java @@ -0,0 +1,34 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.jfree.report.flow.layoutprocessor.LayoutController; + +/** + * Todo: Document me! + * + * @since 22.03.2007 + */ +public interface OfficeRepeatingStructureLayoutController extends LayoutController +{ + + public boolean isNormalFlowProcessing(); + + public VariablesCollection getVariablesCollection(); +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeReportLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeReportLayoutController.java new file mode 100644 index 000000000000..a9cc10fc8de5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeReportLayoutController.java @@ -0,0 +1,260 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.OfficeReport; +import org.libreoffice.report.pentaho.model.VariablesDeclarationSection; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportContext; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.ElementLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory; +import org.jfree.report.structure.Node; + +/** + * Todo: Document me! + * + * @since 06.03.2007 + */ +public class OfficeReportLayoutController extends ElementLayoutController + implements OfficeRepeatingStructureLayoutController +{ + + private static final int STATE_NOT_STARTED = 0; + private static final int STATE_TEMPLATES = 1; + private static final int STATE_PAGE_HEADER_DONE = 2; + private static final int STATE_PAGE_FOOTER_DONE = 3; + private static final int STATE_SPREADSHEET_PAGE_HEADER_DONE = 4; + private static final int STATE_SPREADSHEET_PAGE_FOOTER_DONE = 5; + private static final int STATE_COLUMN_HEADER_DONE = 6; + private static final int STATE_COLUMN_FOOTER_DONE = 7; + private static final int STATE_INITIAL_VARIABLES_DONE = 8; + private static final int STATE_REPORT_HEADER_DONE = 9; + private static final int STATE_REPORT_BODY_DONE = 10; + private static final int STATE_REPORT_FOOTER_VARIABLES = 11; + private static final int STATE_REPORT_FOOTER_DONE = 12; + private int state; + private VariablesCollection variablesCollection; + + public OfficeReportLayoutController() + { + } + + /** + * Initializes the layout controller. This method is called exactly once. It + * is the creators responsibility to call this method. + *

+ * Calling initialize after the first advance must result in a + * IllegalStateException. + * + * @param node the currently processed object or layout node. + * @param flowController the current flow controller. + * @param parent the parent layout controller that was responsible for + * instantiating this controller. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public void initialize(final Object node, final FlowController flowController, + final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + super.initialize(node, flowController, parent); + variablesCollection = new VariablesCollection("auto_report_"); + } + + /** + * Processes any content in this element. This method is called when the + * processing state is 'OPENED'. The returned layout controller will retain + * the 'OPENED' state as long as there is more content available. Once all + * content has been processed, the returned layout controller should carry a + * 'FINISHED' state. + * + * @param target the report target that receives generated events. + * @return the new layout controller instance representing the new state. + * + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + protected LayoutController processContent(final ReportTarget target) + throws DataSourceException, ReportProcessingException, + ReportDataFactoryException + { + final OfficeReport or = (OfficeReport) getElement(); + + switch (state) + { + case OfficeReportLayoutController.STATE_NOT_STARTED: + { + return delegateToTemplates(OfficeReportLayoutController.STATE_TEMPLATES); + } + case OfficeReportLayoutController.STATE_TEMPLATES: + { + return delegateSection(or.getPageHeader(), + OfficeReportLayoutController.STATE_PAGE_HEADER_DONE); + } + case OfficeReportLayoutController.STATE_PAGE_HEADER_DONE: + { + return delegateSpreadsheetSection(or.getPageHeader(), + OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_HEADER_DONE); + } + case OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_HEADER_DONE: + { + return delegateSection(or.getPageFooter(), + OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE); + } + case OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE: + { + return delegateSection(or.getColumnHeader(), + OfficeReportLayoutController.STATE_COLUMN_HEADER_DONE); + } + case OfficeReportLayoutController.STATE_COLUMN_HEADER_DONE: + { + return delegateSection(or.getColumnFooter(), + OfficeReportLayoutController.STATE_COLUMN_FOOTER_DONE); + } + case OfficeReportLayoutController.STATE_COLUMN_FOOTER_DONE: + { + return delegateSection(new VariablesDeclarationSection(), + OfficeReportLayoutController.STATE_INITIAL_VARIABLES_DONE); + } + case OfficeReportLayoutController.STATE_INITIAL_VARIABLES_DONE: + { + return delegateSection(or.getReportHeader(), + OfficeReportLayoutController.STATE_REPORT_HEADER_DONE); + } + case OfficeReportLayoutController.STATE_REPORT_HEADER_DONE: + { + return delegateSection(or.getBodySection(), + OfficeReportLayoutController.STATE_REPORT_BODY_DONE); + } + case OfficeReportLayoutController.STATE_REPORT_BODY_DONE: + { + return delegateSection(new VariablesDeclarationSection(), + OfficeReportLayoutController.STATE_REPORT_FOOTER_VARIABLES); + } + case OfficeReportLayoutController.STATE_REPORT_FOOTER_VARIABLES: + { + return delegateSection(or.getReportFooter(), + OfficeReportLayoutController.STATE_REPORT_FOOTER_DONE); + } + case OfficeReportLayoutController.STATE_REPORT_FOOTER_DONE: + { + return delegateSpreadsheetSection(or.getPageFooter(), + OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_FOOTER_DONE); + } + case OfficeReportLayoutController.STATE_SPREADSHEET_PAGE_FOOTER_DONE: + { + final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); + olc.setProcessingState(ElementLayoutController.FINISHING); + return olc; + } + default: + { + throw new IllegalStateException("Invalid processing state encountered."); + } + } + } + + private LayoutController delegateSpreadsheetSection(final Node node, final int nextState) + throws DataSourceException, ReportProcessingException, ReportDataFactoryException + { + final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); + olc.state = nextState; + + if (node == null) + { + return olc; + } + + final OfficePageSectionLayoutController templateLc = new OfficePageSectionLayoutController(); + templateLc.initialize(node, getFlowController(), olc); + return templateLc; + } + + private LayoutController delegateToTemplates(final int nextState) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException + { + final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); + olc.state = nextState; + + final OfficeTableTemplateLayoutController templateLc = new OfficeTableTemplateLayoutController(); + templateLc.initialize(getElement(), getFlowController(), olc); + return templateLc; + + } + + private LayoutController delegateSection(final Node n, final int nextState) + throws ReportProcessingException, ReportDataFactoryException, + DataSourceException + { + final OfficeReportLayoutController olc = (OfficeReportLayoutController) clone(); + olc.state = nextState; + if (n == null) + { + return olc; + } + + final FlowController flowController = getFlowController(); + final ReportContext reportContext = flowController.getReportContext(); + final LayoutControllerFactory layoutControllerFactory = + reportContext.getLayoutControllerFactory(); + return layoutControllerFactory.create(flowController, n, olc); + + } + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + { + final OfficeReportLayoutController derived = (OfficeReportLayoutController) clone(); + derived.setFlowController(flowController); + return derived; + } + + public boolean isNormalFlowProcessing() + { + return state != OfficeReportLayoutController.STATE_PAGE_HEADER_DONE && state != OfficeReportLayoutController.STATE_PAGE_FOOTER_DONE; + } + + public VariablesCollection getVariablesCollection() + { + return variablesCollection; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableLayoutController.java new file mode 100644 index 000000000000..ed5d63887051 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableLayoutController.java @@ -0,0 +1,69 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; +import org.jfree.report.util.IntegerCache; + +/** + * Creation-Date: 24.04.2007, 14:40:20 + * + */ +public class OfficeTableLayoutController extends SectionLayoutController +{ + + public OfficeTableLayoutController() + { + } + + protected AttributeMap computeAttributes(final FlowController fc, final Element element, final ReportTarget target) + throws DataSourceException + { + final AttributeMap attributeMap = new AttributeMap(super.computeAttributes(fc, element, target)); + final Section s = (Section) element; + int rowCount = 0; + final Node[] nodeArray = s.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + if (node instanceof Element) + { + final Element child = (Element) node; + if (OfficeNamespaces.TABLE_NS.equals(child.getNamespace()) && OfficeToken.TABLE_ROW.equals(child.getType())) + { + rowCount += 1; + } + } + } + + attributeMap.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "table-row-count", IntegerCache.getInteger(rowCount)); + attributeMap.makeReadOnly(); + return attributeMap; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java new file mode 100644 index 000000000000..e610fc421cb7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java @@ -0,0 +1,179 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeGroup; +import org.libreoffice.report.pentaho.model.OfficeReport; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; + + +/** + * Creation-Date: 24.04.2007, 16:06:52 + * + */ +public class OfficeTableTemplateLayoutController extends SectionLayoutController +{ + + private Node[] nodes; + + public OfficeTableTemplateLayoutController() + { + } + + /** + * Initializes the layout controller. This method is called exactly once. It is the creators responsibility to call + * this method. + *

+ * Calling initialize after the first advance must result in a IllegalStateException. + * + * @param node the currently processed object or layout node. + * @param flowController the current flow controller. + * @param parent the parent layout controller that was responsible for instantiating this controller. + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public void initialize(final Object node, final FlowController flowController, final LayoutController parent) + throws DataSourceException, ReportDataFactoryException, ReportProcessingException + { + final Section section = new Section(); + section.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + section.setType("template"); + super.initialize(section, flowController, parent); + + final OfficeReport report = (OfficeReport) node; + final ArrayList tables = new ArrayList(); + if (report.getPageHeader() != null) + { + addFromSection(tables, (Section) report.getPageHeader()); + } + if (report.getReportHeader() != null) + { + addFromSection(tables, (Section) report.getReportHeader()); + } + addPBody(tables, (Section) report.getPreBodySection()); + addFromBody(tables, (Section) report.getBodySection()); + addPBody(tables, (Section) report.getPostBodySection()); + if (report.getReportFooter() != null) + { + addFromSection(tables, (Section) report.getReportFooter()); + } + if (report.getPageFooter() != null) + { + addFromSection(tables, (Section) report.getPageFooter()); + } + + this.nodes = tables.toArray(new Node[tables.size()]); + } + + private void addPBody(final List tables, final Section section) + { + if (section != null) + { + // tables.add(section); + final Node[] nodeArray = section.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + tables.add(node); + } + + } + } + + private void addFromBody(final List tables, final Section section) + { + final Node[] nodeArray = section.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + if (node instanceof Section) + { + final Section child = (Section) node; + if (node instanceof OfficeGroup) + { + addFromGroup(tables, child); + } + else + { + addFromSection(tables, child); + } + } + } + } + + private void addFromGroup(final List tables, final Section section) + { + final Node[] nodeArray = section.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + if (node instanceof Section) + { + final Section element = (Section) node; + if (JFreeReportInfo.REPORT_NAMESPACE.equals(element.getNamespace()) && "group-body".equals(element.getType())) + { + addFromBody(tables, element); + } + else + { + addFromSection(tables, element); + } + } + } + } + + private void addFromSection(final List tables, final Section section) + { + final Node[] nodeArray = section.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + if (node instanceof Element) + { + final Element element = (Element) node; + if (OfficeNamespaces.TABLE_NS.equals(element.getNamespace()) && "table".equals(element.getType())) + { + tables.add(element); + } + } + } + } + + public Node[] getNodes() + { + return nodes; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/TableCellLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/TableCellLayoutController.java new file mode 100644 index 000000000000..dd07f8b2133d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/TableCellLayoutController.java @@ -0,0 +1,228 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormatCondition; +import org.libreoffice.report.pentaho.model.FormattedTextElement; +import org.libreoffice.report.pentaho.model.ReportElement; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataSourceException; +import org.jfree.report.expressions.Expression; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.flow.layoutprocessor.SectionLayoutController; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; +import org.pentaho.reporting.libraries.formula.Formula; +import org.pentaho.reporting.libraries.formula.lvalues.LValue; +import org.pentaho.reporting.libraries.formula.parser.ParseException; + +import org.pentaho.reporting.libraries.base.util.ObjectUtilities; + +/** + * Before writing the table cell, we have to evaluate the children of the cell. The cell itself can either be empty or it + * has a one ore more paragraphs inside. The paragraph contains a single report element, but may contain additional + * other content. + * + * @noinspection CloneableClassWithoutClone + * @since 05.03.2007 + */ +public class TableCellLayoutController extends SectionLayoutController +{ + + public TableCellLayoutController() + { + } + + protected AttributeMap computeAttributes(final FlowController fc, + final Element element, + final ReportTarget target) + throws DataSourceException + { + final AttributeMap attributeMap = new AttributeMap(super.computeAttributes(fc, element, target)); + final String definedStyle = (String) attributeMap.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + attributeMap.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, getDisplayStyleName((Section) element, definedStyle)); + + try + { + final DataFlags value = computeValue(attributeMap); + final String valueType = (String) attributeMap.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); + if (value != null) + { + FormatValueUtility.applyValueForCell(value.getValue(), attributeMap, valueType); + } + else if ( "float".equals(valueType)) + { + attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, + FormatValueUtility.VALUE, "NaN"); + } + // #i114108#: except on form elements, the only value-type that can + // occur without an accompanying value attribute is "string" + else if (!"string".equals(valueType)) + { + attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, + FormatValueUtility.VALUE_TYPE, "string"); + } + } + catch (Exception e) + { + // ignore .. + } + attributeMap.makeReadOnly(); + return attributeMap; + } + + private DataFlags computeValue(final AttributeMap attributeMap) throws DataSourceException + { + // Search for the first FormattedTextElement + final Section cell = (Section) getElement(); + final FormattedTextElement element = findFormattedTextElement(cell); + if (element == null) + { + return null; + } + if (!FormatValueUtility.shouldPrint(this, element)) + { + attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, + FormatValueUtility.VALUE_TYPE, "string"); + return null; + } + return FormatValueUtility.computeDataFlag(element, getFlowController()); + } + + public boolean isValueChanged() + { + try + { + final Section cell = (Section) getElement(); + final FormattedTextElement element = findFormattedTextElement(cell); + if (element == null) + return false; + else + { + final FormulaExpression formulaExpression = element.getValueExpression(); + final Formula formula = formulaExpression.getCompiledFormula(); + final LValue lValue = formula.getRootReference(); + return FormatValueUtility.isReferenceChanged(this, lValue); + } + } + catch (final ParseException e) + { + //LOGGER.debug("Parse Exception", e); + return false; + } + } + + private FormattedTextElement findFormattedTextElement(final Section section) + { + final Node[] nodeArray = section.getNodeArray(); + for (int i = 0; i < nodeArray.length; i++) + { + final Node node = nodeArray[i]; + if (node instanceof FormattedTextElement) + { + return (FormattedTextElement) node; + } + else if (node instanceof Section) + { + final FormattedTextElement retval = findFormattedTextElement((Section) node); + if (retval != null) + { + return retval; + } + } + } + return null; + } + + private String getDisplayStyleName(final Section section, + final String defaultStyle) + { + if (!section.isEnabled() || section.getNodeCount() == 0) + { + return defaultStyle; + } + + final Node[] nodes = section.getNodeArray(); + for (int i = 0; i < nodes.length; i++) + { + final Node child = nodes[i]; + if (child instanceof ReportElement && child.isEnabled()) + { + final ReportElement element = (ReportElement) child; + if (element.getFormatConditionCount() > 0) + { + final Expression displayCond = element.getDisplayCondition(); + if (displayCond != null) + { + try + { + if (Boolean.FALSE.equals(LayoutControllerUtil.evaluateExpression(getFlowController(), element, displayCond))) + { + continue; + } + } + catch (DataSourceException e) + { + // ignore silently .. + } + } + + final FormatCondition[] conditions = element.getFormatConditions(); + for (int j = 0; j < conditions.length; j++) + { + final FormatCondition formCond = conditions[j]; + if (formCond.isEnabled()) + { + try + { + final Object o = LayoutControllerUtil.evaluateExpression(getFlowController(), element, formCond.getFormula()); + if (Boolean.TRUE.equals(o)) + { + return formCond.getStyleName(); + } + } + catch (DataSourceException e) + { + // ignore silently .. + } + } + } + } + } + + if (child instanceof Section) + { + final String childFormatCondition = + getDisplayStyleName((Section) child, defaultStyle); + if (!ObjectUtilities.equal(childFormatCondition, defaultStyle)) + { + return childFormatCondition; + } + } + } + return defaultStyle; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesCollection.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesCollection.java new file mode 100644 index 000000000000..6cd025206eb9 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesCollection.java @@ -0,0 +1,87 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.model.FormattedTextElement; + +import java.util.ArrayList; +import java.util.List; + + +/** + * A variables collection is used to collect all FormattedTextElement objects + * of a repeated header or footer. Later, for each of these elements a variable + * setter is inserted into a hidden (in fact just very small) paragraph. These + * variables can later be read using the 'variable-get' construct. + * + * From the idea, this is equal to the 'strings' declaration of CSS3, although + * this code is explicit instead of declarative. + * + * @since 22.03.2007 + */ +public class VariablesCollection +{ + + private VariablesCollection parent; + private String namePrefix; + private List variables; + + public VariablesCollection(final String namePrefix) + { + this(namePrefix, null); + } + + public VariablesCollection(final String namePrefix, final VariablesCollection parent) + { + if (namePrefix == null) + { + throw new NullPointerException("NamePrefix cannot be null"); + } + + this.namePrefix = namePrefix; + this.parent = parent; + this.variables = new ArrayList(); + } + + public VariablesCollection getParent() + { + return parent; + } + + public String getNamePrefix() + { + return namePrefix; + } + + public String addVariable(final FormattedTextElement element) + { + variables.add(element); + final int size = variables.size(); + return namePrefix + size; + } + + public FormattedTextElement[] getVariables() + { + return variables.toArray(new FormattedTextElement[variables.size()]); + } + + public int getVariablesCount() + { + return variables.size(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java new file mode 100644 index 000000000000..7edacec14e9e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java @@ -0,0 +1,181 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.layoutprocessor; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormattedTextElement; + +import java.text.SimpleDateFormat; + +import java.util.Date; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.flow.FlowController; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.layoutprocessor.AbstractLayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutController; +import org.jfree.report.flow.layoutprocessor.LayoutControllerUtil; +import org.jfree.report.structure.Element; + +/** + * Writes a full variables-declaration section. + * + * @since 20.03.2007 + */ +public class VariablesDeclarationLayoutController + extends AbstractLayoutController +{ + + private boolean processed; + + public VariablesDeclarationLayoutController() + { + } + + private OfficeRepeatingStructureLayoutController getRepeatingParent() + { + LayoutController parent = getParent(); + while (parent != null) + { + if (parent instanceof OfficeRepeatingStructureLayoutController) + { + return (OfficeRepeatingStructureLayoutController) parent; + } + parent = parent.getParent(); + } + return null; + } + + /** + * Advances the processing position. + * + * @param target the report target that receives generated events. + * @return the new layout controller instance representing the new state. + * + * @throws org.jfree.report.DataSourceException + * if there was a problem reading data from the datasource. + * @throws org.jfree.report.ReportProcessingException + * if there was a general problem during the report processing. + * @throws org.jfree.report.ReportDataFactoryException + * if a query failed. + */ + public LayoutController advance(final ReportTarget target) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + if (processed) + { + throw new IllegalStateException("Already processed."); + } + + final VariablesDeclarationLayoutController vlc = + (VariablesDeclarationLayoutController) clone(); + vlc.processed = true; + + final OfficeRepeatingStructureLayoutController orslc = getRepeatingParent(); + if (orslc == null) + { + // There is no repeating parent. What the heck are we doing here .. + return vlc; + } + + final VariablesCollection collection = orslc.getVariablesCollection(); + if (collection.getVariablesCount() == 0) + { + // no processing necessary, as the header or footer contain no variables at all .. + return vlc; + } + + + final Element node = (Element) getNode(); + final AttributeMap vdSection = node.getAttributeMap(); + target.startElement(vdSection); + + final FormattedTextElement[] variables = collection.getVariables(); + for (int i = 0; i < variables.length; i++) + { + final FormattedTextElement variable = variables[i]; + final String varName = collection.getNamePrefix() + (i + 1); + final AttributeMap map = generateVariableSetSection(variable); + map.setAttribute(OfficeNamespaces.TEXT_NS, "name", varName); + target.startElement(map); + target.endElement(map); + + } + target.endElement(vdSection); + return vlc; + } + + private AttributeMap generateVariableSetSection(final FormattedTextElement variable) + throws DataSourceException + { + final AttributeMap variableSection = new AttributeMap(); + variableSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TEXT_NS); + variableSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, "variable-set"); + variableSection.setAttribute(OfficeNamespaces.TEXT_NS, "display", "none"); + + final FormulaExpression valueExpression = variable.getValueExpression(); + final Object value = LayoutControllerUtil.evaluateExpression(getFlowController(), variable, valueExpression); + String formula = FormatValueUtility.applyValueForVariable(value, variableSection); + if (formula == null) + { + formula = "" + value; + } + if (value instanceof java.sql.Date) + { + final Date date = (Date) value; + final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy;MM;dd"); + formula = "Date(" + dateFormat.format(date) + ")"; + } + variableSection.setAttribute(OfficeNamespaces.TEXT_NS, "formula", "ooow:" + formula); + + return variableSection; + } + + /** + * Checks, whether the layout controller would be advanceable. If this method + * returns true, it is generally safe to call the 'advance()' method. + * + * @return true, if the layout controller is advanceable, false otherwise. + */ + public boolean isAdvanceable() + { + return !processed; + } + + /** + * Joins with a delegated process flow. This is generally called from a child + * flow and should *not* (I mean it!) be called from outside. If you do, + * you'll suffer. + * + * @param flowController the flow controller of the parent. + * @return the joined layout controller that incorperates all changes from the + * delegate. + */ + public LayoutController join(final FlowController flowController) + throws DataSourceException, ReportDataFactoryException, + ReportProcessingException + { + throw new UnsupportedOperationException("Join is not supported in this layout controller"); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryLoader.java b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryLoader.java new file mode 100644 index 000000000000..fdb52154ffd5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryLoader.java @@ -0,0 +1,180 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.loader; + +import org.libreoffice.report.InputRepository; + +import java.net.URL; + +import java.util.HashMap; +import java.util.Map; + +import org.pentaho.reporting.libraries.resourceloader.ResourceData; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException; +import org.pentaho.reporting.libraries.resourceloader.ResourceLoader; +import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.resourceloader.loader.LoaderUtils; + + +public class InputRepositoryLoader implements ResourceLoader +{ + + private final InputRepository inputRepository; + private ResourceManager resourceManager; + + public InputRepositoryLoader(final InputRepository inputRepository) + { + if (inputRepository == null) + { + throw new NullPointerException(); + } + this.inputRepository = inputRepository; + } + + /** + * Checks, whether this resource loader implementation was responsible for + * creating this key. + * + * @param key + * @return + */ + public boolean isSupportedKey(final ResourceKey key) + { + return InputRepositoryLoader.class.getName().equals(key.getSchema()); + } + + /** + * Creates a new resource key from the given object and the factory keys. + * + * @param value + * @param factoryKeys + * @return the created key or null, if the format was not recognized. + * @throws org.jfree.resourceloader.ResourceKeyCreationException + * if creating the key failed. + */ + public ResourceKey createKey(final Object value, + final Map factoryKeys) + throws ResourceKeyCreationException + { + if (value instanceof String) + { + final String strVal = (String) value; + if (strVal.startsWith("sun:oo://")) + { + return new ResourceKey(InputRepositoryLoader.class.getName(), + new InputResourceKey(inputRepository.getId(), strVal), factoryKeys); + } + } + return null; + } + + /** + * Derives a new resource key from the given key. If neither a path nor new + * factory-keys are given, the parent key is returned. + * + * @param parent the parent + * @param path the derived path (can be null). + * @param factoryKeys the optional factory keys (can be null). + * @return the derived key. + * @throws org.jfree.resourceloader.ResourceKeyCreationException + * if the key cannot be derived for any reason. + */ + @SuppressWarnings("unchecked") + public ResourceKey deriveKey(final ResourceKey parent, + final String path, + final Map factoryKeys) + throws ResourceKeyCreationException + { + if (!isSupportedKey(parent)) + { + throw new ResourceKeyCreationException("Assertation: Unsupported parent key type"); + } + + final InputResourceKey parentKey = (InputResourceKey) parent.getIdentifier(); + final String resource; + if (path.startsWith("sun:oo://")) + { + resource = path; + } + else if (path.charAt(0) == '/') + { + resource = "sun:oo:/" + path; + } + else + { + resource = LoaderUtils.mergePaths(parentKey.getPath(), path); + } + final Map map; + if (factoryKeys != null) + { + map = new HashMap(); + map.putAll(parent.getFactoryParameters()); + map.putAll(factoryKeys); + } + else + { + map = parent.getFactoryParameters(); + } + return new ResourceKey(parent.getSchema(), + new InputResourceKey(parentKey.getInputRepositoryId(), resource), map); + } + + public URL toURL(final ResourceKey key) + { + return null; + } + + public ResourceData load(final ResourceKey key) + throws ResourceLoadingException + { + if (!isSupportedKey(key)) + { + throw new ResourceLoadingException("None of my keys."); + } + + return new InputRepositoryResourceData(key, inputRepository); + } + + public void setResourceManager(final ResourceManager manager) + { + this.resourceManager = manager; + } + + public ResourceManager getResourceManager() + { + return resourceManager; + } + + public boolean isSupportedDeserializer(String string) + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public String serialize(ResourceKey rk, ResourceKey rk1) throws ResourceException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public ResourceKey deserialize(ResourceKey rk, String string) throws ResourceKeyCreationException + { + throw new UnsupportedOperationException("Not supported yet."); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryResourceData.java b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryResourceData.java new file mode 100644 index 000000000000..e3dde734416c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputRepositoryResourceData.java @@ -0,0 +1,76 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.loader; + +import org.libreoffice.report.InputRepository; + +import java.io.IOException; +import java.io.InputStream; + +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.resourceloader.loader.AbstractResourceData; + + +public class InputRepositoryResourceData extends AbstractResourceData +{ + + private final InputRepository inputRepository; + private final ResourceKey key; + private final String resourceIdentifer; + + public InputRepositoryResourceData(final ResourceKey key, + final InputRepository repository) + { + this.key = key; + this.inputRepository = repository; + final InputResourceKey rkey = (InputResourceKey) key.getIdentifier(); + final String identifier = rkey.getPath(); + this.resourceIdentifer = identifier.substring("sun:oo://".length()); + } + + public Object getAttribute(final String key) + { + // we dont support attributes here .. + return null; + } + + public ResourceKey getKey() + { + return key; + } + + public InputStream getResourceAsStream(final ResourceManager caller) + throws ResourceLoadingException + { + try + { + return inputRepository.createInputStream(resourceIdentifer); + } + catch (IOException e) + { + throw new ResourceLoadingException("Failed to create input stream for " + resourceIdentifer, e); + } + } + + public long getVersion(final ResourceManager caller) + { + return inputRepository.getVersion(resourceIdentifer); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputResourceKey.java b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputResourceKey.java new file mode 100644 index 000000000000..917b43cc223a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/loader/InputResourceKey.java @@ -0,0 +1,53 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.loader; + +import java.io.Serializable; + +/** + * Creation-Date: Feb 22, 2007, 8:51:42 PM + * + */ +public class InputResourceKey implements Serializable +{ + + private static final long serialVersionUID = 2819901838705793075L; + private final Object inputRepositoryId; + private final String path; + + public InputResourceKey(final Object inputRepositoryId, final String path) + { + this.inputRepositoryId = inputRepositoryId; + this.path = path; + } + + public Object getInputRepositoryId() + { + return inputRepositoryId; + } + + public String getPath() + { + return path; + } + + public String toString() + { + return "InputResourceKey{" + "inputRepositoryId=" + inputRepositoryId + ", path='" + path + '\'' + '}'; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/DataStyle.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/DataStyle.java new file mode 100644 index 000000000000..2a2155b4102f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/DataStyle.java @@ -0,0 +1,45 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Section; + +/** + * Represents an automatic or manual data style definition. + * + * @since 02.03.2007 + */ +public class DataStyle extends Section +{ + + public DataStyle() + { + } + + public String getStyleName() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); + } + + public void setStyleName(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "name", name); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/FixedTextElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/FixedTextElement.java new file mode 100644 index 000000000000..45145b7cfbda --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/FixedTextElement.java @@ -0,0 +1,42 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.Section; + +/** + * Todo: Document me! + * + * @since 02.03.2007 + */ +public class FixedTextElement extends ReportElement +{ + + private final Section content; + + public FixedTextElement() + { + content = new Section(); + content.setVirtual(true); + } + + public Section getContent() + { + return content; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceDeclsSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceDeclsSection.java new file mode 100644 index 000000000000..b4e4bd1d5254 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceDeclsSection.java @@ -0,0 +1,64 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import java.util.HashMap; +import java.util.Map; + +import org.jfree.report.structure.Element; + + +/** + * Todo: Document me! + * + * @since 13.03.2007 + */ +public class FontFaceDeclsSection extends Element +{ + + private final Map fontFaces; + + public FontFaceDeclsSection() + { + fontFaces = new HashMap(); + setType("font-face-decls"); + setNamespace(OfficeNamespaces.OFFICE_NS); + } + + public void addFontFace(final FontFaceElement style) + { + fontFaces.put(style.getStyleName(), style); + } + + public FontFaceElement getFontFace(final String name) + { + return fontFaces.get(name); + } + + public FontFaceElement[] getAllFontFaces() + { + return fontFaces.values().toArray(new FontFaceElement[fontFaces.size()]); + } + + public boolean containsFont(final String fontName) + { + return fontFaces.containsKey(fontName); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceElement.java new file mode 100644 index 000000000000..6ea79a35ebe2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/FontFaceElement.java @@ -0,0 +1,45 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Section; + +/** + * Represents an automatic or manual data style definition. + * + * @since 02.03.2007 + */ +public class FontFaceElement extends Section +{ + + public FontFaceElement() + { + } + + public String getStyleName() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); + } + + public void setStyleName(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "name", name); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/FormatCondition.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/FormatCondition.java new file mode 100644 index 000000000000..32ca96eefb55 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/FormatCondition.java @@ -0,0 +1,57 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.expressions.FormulaExpression; + +/** + * The format condition defines, what style-format is applied to an element. + * + * @since 02.03.2007 + */ +public class FormatCondition +{ + + private final FormulaExpression formula; + private final String styleName; + private final boolean enabled; + + public FormatCondition(final FormulaExpression formula, + final String styleName, + final boolean enabled) + { + this.formula = formula; + this.styleName = styleName; + this.enabled = enabled; + } + + public FormulaExpression getFormula() + { + return formula; + } + + public String getStyleName() + { + return styleName; + } + + public boolean isEnabled() + { + return enabled; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/FormattedTextElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/FormattedTextElement.java new file mode 100644 index 000000000000..dd1b273516f0 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/FormattedTextElement.java @@ -0,0 +1,48 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.expressions.FormulaExpression; + +/** + * A formatted text element takes a formula, evaluates it and formats the + * given element using some arbitary style. (As this is totally undocumented, + * we leave this out for now. Either we'll insert a field there or we call + * an UNO-component to do the formatting. + * + * @since 02.03.2007 + */ +public class FormattedTextElement extends ReportElement +{ + + private FormulaExpression valueExpression; + + public FormattedTextElement() + { + } + + public FormulaExpression getValueExpression() + { + return valueExpression; + } + + public void setValueExpression(final FormulaExpression valueExpression) + { + this.valueExpression = valueExpression; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/ImageElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/ImageElement.java new file mode 100644 index 000000000000..e15f66da1b33 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/ImageElement.java @@ -0,0 +1,77 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.expressions.FormulaExpression; + +/** + * Todo: Document me! + * + * @since 02.03.2007 + */ +public class ImageElement extends ReportElement +{ + + private FormulaExpression formula; + + public ImageElement() + { + } + + public FormulaExpression getFormula() + { + return formula; + } + + public void setFormula(final FormulaExpression formula) + { + this.formula = formula; + } + + public String getScaleMode() + { + String val = (String) getAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.SCALE); + if (OfficeToken.TRUE.equals(val)) + { + val = OfficeToken.ANISOTROPIC; + } + else if (OfficeToken.FALSE.equals(val) || val == null) + { + val = OfficeToken.NONE; + } + return val; + } + + public boolean isPreserveIRI() + { + return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI)); + } + + public void setPreserveIRI(final boolean preserveIRI) + { + setAttribute(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI, String.valueOf(preserveIRI)); + } + + public String getImageData() + { + return (String) getAttribute(OfficeNamespaces.FORM_NS, OfficeToken.IMAGE_DATA); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/ObjectOleElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/ObjectOleElement.java new file mode 100644 index 000000000000..ddd74bd8bcc6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/ObjectOleElement.java @@ -0,0 +1,75 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import java.util.ArrayList; +import java.util.List; + +public class ObjectOleElement extends ReportElement +{ + + private String url; + private final List masterfields; + private final List detailfields; + private String classid; + + public ObjectOleElement() + { + masterfields = new ArrayList(); + detailfields = new ArrayList(); + } + + public String getClassid() + { + return classid; + } + + public List getDetailfields() + { + return detailfields; + } + + public List getMasterfields() + { + return masterfields; + } + + public String getUrl() + { + return url; + } + + public void setClassId(final String classid) + { + this.classid = classid; + } + + public void setUrl(final String _url) + { + url = _url; + } + + public void addMasterDetailFields(final String master, final String detail) + { + if (master != null) + { + masterfields.add(master); + detailfields.add(detail == null ? master : detail); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDetailSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDetailSection.java new file mode 100644 index 000000000000..2307d1dc7775 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDetailSection.java @@ -0,0 +1,33 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.DetailSection; + +/** + * A Marker-Class. + * + * @since 02.03.2007 + */ +public class OfficeDetailSection extends DetailSection +{ + + public OfficeDetailSection() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDocument.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDocument.java new file mode 100644 index 000000000000..8e8e475e49ed --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeDocument.java @@ -0,0 +1,63 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.JobProperties; + +import org.jfree.report.JFreeReport; + +/** + * An office document represents the root of the report processing. In + * OpenOffice reports, this is the only child of the report object. + * + * @since 02.03.2007 + */ +public class OfficeDocument extends JFreeReport +{ + + private OfficeStylesCollection stylesCollection; + private JobProperties jobProperties; + + public JobProperties getJobProperties() + { + return jobProperties; + } + + public void setJobProperties(final JobProperties jobProperties) + { + this.jobProperties = jobProperties; + } + + public OfficeDocument() + { + } + + public OfficeStylesCollection getStylesCollection() + { + return stylesCollection; + } + + public void setStylesCollection(final OfficeStylesCollection stylesCollection) + { + if (stylesCollection == null) + { + throw new NullPointerException(); + } + this.stylesCollection = stylesCollection; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroup.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroup.java new file mode 100644 index 000000000000..b10aab188d0c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroup.java @@ -0,0 +1,84 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.expressions.Expression; +import org.jfree.report.structure.Section; + +/** + * An office group is a virtual section that contains the group header, footer + * and either a detail section or another group. + * + * @since 02.03.2007 + */ +public class OfficeGroup extends Section +{ + + public OfficeGroup() + { + } + + public boolean isStartNewColumn() + { + return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "start-new-column")); + } + + public boolean isResetPageNumber() + { + return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "reset-page-number")); + } + + public OfficeGroupSection getHeader() + { + final OfficeGroupInstanceSection instanceSection = + (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); + if (instanceSection == null) + { + return null; + } + return (OfficeGroupSection) instanceSection.findFirstChild(OfficeNamespaces.OOREPORT_NS, "group-header"); + + } + + public OfficeGroupSection getFooter() + { + final OfficeGroupInstanceSection instanceSection = + (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); + if (instanceSection == null) + { + return null; + } + return (OfficeGroupSection) instanceSection.findFirstChild(OfficeNamespaces.OOREPORT_NS, "group-footer"); + + } + + public Expression getGroupingExpression() + { + final OfficeGroupInstanceSection instanceSection = + (OfficeGroupInstanceSection) findFirstChild(JFreeReportInfo.REPORT_NAMESPACE, "group-instance"); + if (instanceSection == null) + { + return null; + } + return instanceSection.getGroupingExpression(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupInstanceSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupInstanceSection.java new file mode 100644 index 000000000000..a9adad301c41 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupInstanceSection.java @@ -0,0 +1,33 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.Group; + +/** + * Creation-Date: 25.07.2007, 14:41:54 + * + */ +public class OfficeGroupInstanceSection extends Group +{ + + public OfficeGroupInstanceSection() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupSection.java new file mode 100644 index 000000000000..d4e7818b3d8e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeGroupSection.java @@ -0,0 +1,44 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Section; + +/** + * A group header or footer. If such a section is marked as sticky, it will be + * repeated on each new page. + * + * @since 02.03.2007 + */ +public class OfficeGroupSection extends Section +{ + + public OfficeGroupSection() + { + } + + public boolean isRepeatSection() + { + final Object repeatFlag = + getAttribute(OfficeNamespaces.OOREPORT_NS, "repeat-section"); + return OfficeToken.TRUE.equals(repeatFlag); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterPage.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterPage.java new file mode 100644 index 000000000000..8cdb50880213 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterPage.java @@ -0,0 +1,56 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Section; + +/** + * A master page. A master page can contain header and footer and is linked + * to a page-layout. + * + * @since 13.03.2007 + */ +public class OfficeMasterPage extends Section +{ + + public OfficeMasterPage() + { + } + + public String getStyleName() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); + } + + public void setStyleName(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "name", name); + } + + public String getPageLayout() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "page-layout-name"); + } + + public void setPageLayout(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "page-layout-name", name); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterStyles.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterStyles.java new file mode 100644 index 000000000000..be42e98620e4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeMasterStyles.java @@ -0,0 +1,73 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import java.util.HashMap; +import java.util.Map; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + + +/** + * The master-styles section can have either a master-page, handout-master + * or draw-layer-set. (The latter ones are ignored for the reporting purposes, + * they are PowerPoint related.) + * + * There is no documentation how the system selects a master-page if there is + * no master-page assigned to the paragraph. However, it seems as if the + * master-page called 'Standard' is used as initial default. + * + * @since 13.03.2007 + */ +public class OfficeMasterStyles extends Element +{ + + private final Map masterPages; + private final Section otherNodes; + + public OfficeMasterStyles() + { + masterPages = new HashMap(); + otherNodes = new Section(); + } + + public void addMasterPage(final OfficeMasterPage masterPage) + { + if (masterPage == null) + { + throw new NullPointerException(); + } + this.masterPages.put(masterPage.getStyleName(), masterPage); + } + + public OfficeMasterPage getMasterPage(final String name) + { + return masterPages.get(name); + } + + public OfficeMasterPage[] getAllMasterPages() + { + return masterPages.values().toArray(new OfficeMasterPage[masterPages.size()]); + } + + public Section getOtherNodes() + { + return otherNodes; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeReport.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeReport.java new file mode 100644 index 000000000000..589d7488d01d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeReport.java @@ -0,0 +1,138 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; + +/** + * A office report is an ordered section. It contains several root-level bands + * which need to be processed in a given order. + * + * A report can have named expression attached. These expressions will be + * computed at the global scope and will be available for all child elements. + * + * @since 02.03.2007 + */ +public class OfficeReport extends Element +{ + + private Node pageHeader; + private Node pageFooter; + private Node columnHeader; + private Node columnFooter; + private Node reportHeader; + private Node reportFooter; + private Node bodySection; + private Node preBodySection; + private Node postBodySection; + + public Node getPostBodySection() + { + return postBodySection; + } + + public void setPostBodySection(final Node postBodySection) + { + this.postBodySection = postBodySection; + } + + public Node getPreBodySection() + { + return preBodySection; + } + + public void setPreBodySection(final Node preBodySection) + { + this.preBodySection = preBodySection; + } + + public OfficeReport() + { + } + + public Node getPageHeader() + { + return pageHeader; + } + + public void setPageHeader(final Node pageHeader) + { + this.pageHeader = pageHeader; + } + + public Node getPageFooter() + { + return pageFooter; + } + + public void setPageFooter(final Node pageFooter) + { + this.pageFooter = pageFooter; + } + + public Node getColumnHeader() + { + return columnHeader; + } + + public void setColumnHeader(final Node columnHeader) + { + this.columnHeader = columnHeader; + } + + public Node getColumnFooter() + { + return columnFooter; + } + + public void setColumnFooter(final Node columnFooter) + { + this.columnFooter = columnFooter; + } + + public Node getReportHeader() + { + return reportHeader; + } + + public void setReportHeader(final Node reportHeader) + { + this.reportHeader = reportHeader; + } + + public Node getReportFooter() + { + return reportFooter; + } + + public void setReportFooter(final Node reportFooter) + { + this.reportFooter = reportFooter; + } + + public Node getBodySection() + { + return bodySection; + } + + public void setBodySection(final Node bodySection) + { + this.bodySection = bodySection; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyle.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyle.java new file mode 100644 index 000000000000..c70b9ee30878 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyle.java @@ -0,0 +1,120 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +/** + * Represents an automatic or manual style definition. + * + * @since 02.03.2007 + */ +public class OfficeStyle extends Section +{ + + public OfficeStyle() + { + setNamespace(OfficeNamespaces.STYLE_NS); + setType("style"); + } + + public String getStyleName() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); + } + + public void setStyleName(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "name", name); + } + + /** + * A parent style name must be a common style (it cannot be an automatic + * style) and has to exist. If no parent style is given, an implementation + * specific default style is used. + * + * @return + */ + public String getStyleParent() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "parent-style-name"); + } + + public void setStyleParent(final String parentName) + { + setAttribute(OfficeNamespaces.STYLE_NS, "parent-style-name", parentName); + } + + public String getStyleFamily() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "family"); + } + + public void setStyleFamily(final String family) + { + setAttribute(OfficeNamespaces.STYLE_NS, "family", family); + } + +// public String getMasterPageName() +// { +// return (String) getAttribute(OfficeNamespaces.STYLE_NS, "master-page-name"); +// } + public Element getParagraphProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "paragraph-properties"); + } + + public Element getTextProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "text-properties"); + } + + public Element getTableRowProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "table-row-properties"); + } + + public Element getTableProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "table-properties"); + } + + public Element getTableColumnProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "table-column-properties"); + } + + public Element getSectionProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "section-properties"); + } + + public Element getTableCellProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, "table-cell-properties"); + } + + public Element getGraphicProperties() + { + return findFirstChild(OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyles.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyles.java new file mode 100644 index 000000000000..5a87a989ad3c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStyles.java @@ -0,0 +1,188 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import java.io.Serializable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jfree.report.structure.Element; + + +/** + * Holds one style type, either an automatic, common or master style. This is a + * marker container that defines the nature of the styles contained within this + * container. (Yeah, it is awkward, but that's how the document model describes + * it.) + * + * The style family can be one of paragraph, text, section, table, table-column, + * table-row, table-cell, table-page, chart, default, drawing-page, graphic, + * presentation, control and ruby. + * + * @since 07.03.2007 + */ +public class OfficeStyles extends Element +{ + + public static class StyleKey implements Serializable + { + + private static final long serialVersionUID = 4931878927362887477L; + private final String family; + private final String name; + + public StyleKey(final String family, final String name) + { + if (family == null) + { + throw new NullPointerException(); + } + this.family = family; + this.name = name; + } + + public String getFamily() + { + return family; + } + + public String getName() + { + return name; + } + + public boolean equals(final Object obj) + { + if (this != obj) + { + if (obj == null || getClass() != obj.getClass()) + { + return false; + } + + final StyleKey styleKey = (StyleKey) obj; + + if (!family.equals(styleKey.family) || (name != null ? !name.equals(styleKey.name) : styleKey.name != null)) + { + return false; + } + } + return true; + } + + public int hashCode() + { + int result = family.hashCode(); + result = 31 * result + (name != null ? name.hashCode() : 0); + return result; + } + } + private final Map pageStyles; + private final Map dataStyles; + private final Map styles; + private final List otherChildren; + + public OfficeStyles() + { + this.styles = new HashMap(); + this.dataStyles = new HashMap(); + this.pageStyles = new HashMap(); + this.otherChildren = new ArrayList(); + } + + public OfficeStyle getStyle(final String family, final String name) + { + return styles.get(new StyleKey(family, name)); + } + + public void addStyle(final OfficeStyle style) + { + if (style == null) + { + throw new NullPointerException(); + } + final String styleFamily = style.getStyleFamily(); + if (styleFamily == null) + { + throw new NullPointerException(); + } + if (style.getStyleName() == null) + { + throw new NullPointerException(); + } + styles.put(new StyleKey(styleFamily, style.getStyleName()), style); + } + + public void addPageStyle(final PageLayout style) + { + pageStyles.put(style.getStyleName(), style); + } + + public PageLayout getPageStyle(final String name) + { + return pageStyles.get(name); + } + + public void addDataStyle(final DataStyle style) + { + dataStyles.put(style.getStyleName(), style); + } + + public DataStyle getDataStyle(final String name) + { + return dataStyles.get(name); + } + + public void addOtherNode(final Element node) + { + otherChildren.add(node); + } + + public DataStyle[] getAllDataStyles() + { + return dataStyles.values().toArray(new DataStyle[dataStyles.size()]); + } + + public PageLayout[] getAllPageStyles() + { + return pageStyles.values().toArray(new PageLayout[pageStyles.size()]); + } + + public OfficeStyle[] getAllStyles() + { + return styles.values().toArray(new OfficeStyle[styles.size()]); + } + + public Element[] getOtherStyles() + { + return otherChildren.toArray(new Element[otherChildren.size()]); + } + + public boolean containsStyle(final String family, final String name) + { + return styles.containsKey(new StyleKey(family, name)); + } + + public boolean containsDataStyle(final String styleName) + { + return dataStyles.containsKey(styleName); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStylesCollection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStylesCollection.java new file mode 100644 index 000000000000..f760bcf776ab --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeStylesCollection.java @@ -0,0 +1,113 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Element; + +/** + * Holds all style-definitions and provides some simplified lookup methods to + * grab them by their type and name. + *

+ * For now, we are only interested in 'style:style' nodes. Each of these nodes + * has a style-name and a style-family. Each style declaration can have a parent + * style, from which properties are inherited. + *

+ * Style names are unique within the family, no matter whether the style is an + * automatic style, an common style or a master style. + *

+ * The contents of this element are the union of the 'styles.xml' file (if it + * exists), the font-declarations and auto-styles of the document-content.xml + * and the styles declared in the main document. + * + * @since 06.03.2007 + */ +public class OfficeStylesCollection extends Element +{ + // Font-face declarations are copied as is. We simply merge them by adding + // them all in one set. This may result in duplicate entries, but as the + // fileformat does not forbid that, it therefore must be ok. + + private final FontFaceDeclsSection fontFaceDecls; + private final OfficeStyles automaticStyles; + private final OfficeStyles commonStyles; + private final OfficeMasterStyles masterStyles; + + public OfficeStylesCollection() + { + fontFaceDecls = new FontFaceDeclsSection(); + + automaticStyles = new OfficeStyles(); + automaticStyles.setType("automatic-styles"); + automaticStyles.setNamespace(OfficeNamespaces.OFFICE_NS); + + commonStyles = new OfficeStyles(); + commonStyles.setType("styles"); + commonStyles.setNamespace(OfficeNamespaces.OFFICE_NS); + + masterStyles = new OfficeMasterStyles(); + masterStyles.setType("master-styles"); + masterStyles.setNamespace(OfficeNamespaces.OFFICE_NS); + } + + public OfficeStyle getStyle(final String family, final String name) + { + final OfficeStyle commonStyle = commonStyles.getStyle(family, name); + if (commonStyle != null) + { + return commonStyle; + } + final OfficeStyle autoStyle = automaticStyles.getStyle(family, name); + if (autoStyle != null) + { + return autoStyle; + } + + // And later: Autogenerate one of the default styles. + // However, at this moment, we dont have a clue about the default styles + // at all. Maybe we should add them to make this implementation more robust + // against invalid documents. + return null; + } + + public boolean containsStyle(final String family, final String name) + { + return (getStyle(family, name) != null); + } + + public OfficeStyles getAutomaticStyles() + { + return automaticStyles; + } + + public OfficeStyles getCommonStyles() + { + return commonStyles; + } + + public OfficeMasterStyles getMasterStyles() + { + return masterStyles; + } + + public FontFaceDeclsSection getFontFaceDecls() + { + return fontFaceDecls; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeTableSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeTableSection.java new file mode 100644 index 000000000000..5ebc13882c3e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/OfficeTableSection.java @@ -0,0 +1,32 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.Section; + +/** + * Creation-Date: 24.04.2007, 15:55:17 + * + */ +public class OfficeTableSection extends Section +{ + + public OfficeTableSection() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/PageLayout.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/PageLayout.java new file mode 100644 index 000000000000..8ef007c7ed35 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/PageLayout.java @@ -0,0 +1,58 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.structure.Section; + +/** + * A page layout describes the physical properties of a page. It is equal to + * an @page rule in CSS. + * + * @since 13.03.2007 + */ +public class PageLayout extends Section +{ + + public PageLayout() + { + setNamespace(OfficeNamespaces.STYLE_NS); + setType("page-layout"); + } + + public String getStyleName() + { + return (String) getAttribute(OfficeNamespaces.STYLE_NS, "name"); + } + + public void setStyleName(final String name) + { + setAttribute(OfficeNamespaces.STYLE_NS, "name", name); + } + + public Section getHeaderStyle() + { + return (Section) findFirstChild(OfficeNamespaces.STYLE_NS, "header-style"); + } + + public Section getFooterStyle() + { + return (Section) findFirstChild(OfficeNamespaces.STYLE_NS, "footer-style"); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/PageSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/PageSection.java new file mode 100644 index 000000000000..f9997e266181 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/PageSection.java @@ -0,0 +1,50 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.structure.Section; + +/** + * This represents either a page header or page footer. + * + * @since 02.03.2007 + */ +public class PageSection extends Section +{ + + private static final String NOT_WITH_REPORT_HEADER_NOR_FOOTER = "not-with-report-header-nor-footer"; + + public PageSection() + { + } + + public static boolean isPrintWithReportHeader(final AttributeMap attrs) + { + final String pagePrintOption = (String) attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "page-print-option"); + return !("not-with-report-header".equals(pagePrintOption) || NOT_WITH_REPORT_HEADER_NOR_FOOTER.equals(pagePrintOption)); + } + + public static boolean isPrintWithReportFooter(final AttributeMap attrs) + { + final String pagePrintOption = (String) attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "page-print-option"); + return !("not-with-report-footer".equals(pagePrintOption) || NOT_WITH_REPORT_HEADER_NOR_FOOTER.equals(pagePrintOption)); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/RawText.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/RawText.java new file mode 100644 index 000000000000..bebbb8637df8 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/RawText.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.StaticText; + +/** + * A marker implementation. If encountered by the OfficeRawTarget, this text + * will be written without being normalized. Such text represents a page + * header or footer. + * + * @since 13.03.2007 + */ +public class RawText extends StaticText +{ + + public RawText(final String text) + { + super(text); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/ReportElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/ReportElement.java new file mode 100644 index 000000000000..d2f2d3cd8de1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/ReportElement.java @@ -0,0 +1,100 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + + +/** + * A report element is the base class for all content generating elements in a + * report. + * + * @since 02.03.2007 + */ +public abstract class ReportElement extends Element +{ + + private final List formatConditions; + + protected ReportElement() + { + formatConditions = new ArrayList(); + } + + /** + * Checks the current group and prints this element only if the current row is + * the first row for that particular group. + * + * @return true, if the element should only be printed in the first row of the + * current group, false otherwise. + */ + public boolean isPrintWhenGroupChange() + { + return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "print-when-group-change")); + } + + public void setPrintWhenGroupChange(final boolean printWhenGroupChange) + { + setAttribute(OfficeNamespaces.OOREPORT_NS, "print-when-group-change", + String.valueOf(printWhenGroupChange)); + } + + /** + * Checks, whether the printed value has been changed since the last run. The + * element will only be printed, if there was at least one change. + * + * @return true, if repeated values should be printed, false if repeated + * values should be surpressed. + */ + public boolean isPrintRepeatedValues() + { + return OfficeToken.TRUE.equals(getAttribute(OfficeNamespaces.OOREPORT_NS, "print-repeated-values")); + } + + public void setPrintRepeatedValues(final boolean printRepeatedValues) + { + setAttribute(OfficeNamespaces.OOREPORT_NS, "print-repeated-values", + String.valueOf(printRepeatedValues)); + } + + public void addFormatCondition(final FormatCondition formatCondition) + { + if (formatCondition == null) + { + throw new NullPointerException(); + } + + this.formatConditions.add(formatCondition); + } + + public FormatCondition[] getFormatConditions() + { + return this.formatConditions.toArray(new FormatCondition[this.formatConditions.size()]); + } + + public int getFormatConditionCount() + { + return formatConditions.size(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/TableCellElement.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/TableCellElement.java new file mode 100644 index 000000000000..7d9bc193a287 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/TableCellElement.java @@ -0,0 +1,33 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.structure.Section; + +/** + * Todo: Document me! + * + * @since 05.03.2007 + */ +public class TableCellElement extends Section +{ + + public TableCellElement() + { + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/model/VariablesDeclarationSection.java b/reportbuilder/java/org/libreoffice/report/pentaho/model/VariablesDeclarationSection.java new file mode 100644 index 000000000000..c429176535eb --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/model/VariablesDeclarationSection.java @@ -0,0 +1,42 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.model; + +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.structure.Section; + +/** + * A paragraph that contains variables-declarations. This paragraph will be + * printed in the first cell of the first table (if there's one). + * + * The VariablesDeclarationSection is an auto-generated structure element that + * has no model-representation. The section itself is empty and simply acts + * as flag for the output-processor. The output processor itself is responsible + * to maintain the variables. + * + * @since 19.03.2007 + */ +public class VariablesDeclarationSection extends Section +{ + + public VariablesDeclarationSection() + { + setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + setType("variables-section"); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/module.properties b/reportbuilder/java/org/libreoffice/report/pentaho/module.properties new file mode 100644 index 000000000000..ad74ab7b52b3 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/module.properties @@ -0,0 +1,36 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + + +module-info: + name: factory-report-sun + producer: The JFreeReport project - www.jfree.org/jfreereport + description: XML-Parsers for OpenOffice.org report definitions. These definitions\ + are basicly similiar to the old JFreeReport format, with some limited absolute\ + positioning capabilities. + version.major: 0 + version.minor: 90 + version.patchlevel: 0 + +depends: + module: org.jfree.report.modules.factories.report.base.ReportFactoryBaseModule + version.major: 0 + version.minor: 92 + version.patchlevel: 0 + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-datastyle.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-datastyle.css new file mode 100644 index 000000000000..6c94b1e059fe --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-datastyle.css @@ -0,0 +1,23 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +@namespace url("urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"); + +/** + * All default styles for data-styles elements. +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-draw.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-draw.css new file mode 100644 index 000000000000..341f44ec550e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-draw.css @@ -0,0 +1,5 @@ +@namespace url("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"); + +/** + * All default styles for draw elements. +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-form.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-form.css new file mode 100644 index 000000000000..7c8c43008435 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-form.css @@ -0,0 +1,5 @@ +@namespace url("urn:oasis:names:tc:opendocument:xmlns:form:1.0"); + +/** + * All default styles for form elements. +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-style.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-style.css new file mode 100644 index 000000000000..bca51bd6ba8b --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-style.css @@ -0,0 +1,28 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +@namespace url("urn:oasis:names:tc:opendocument:xmlns:style:1.0"); + +/** + * All default styles for style elements. (They should not be visible anyway, + * but better be complete than be sorry afterwards.) +*/ + +raw-styles { + display:none; +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-table.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-table.css new file mode 100644 index 000000000000..80145880af0f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-table.css @@ -0,0 +1,55 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +@namespace url("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); + +table { + display: table; +} + +table-columns { + display: table-column-group; +} + +table-column { + display: table-column; +} + +table-row { + display: table-row; +} + +table-cell { + display: table-cell; +} + +table-cell[number-cols-spanned], +table-cell[number-cols-spanned], +table-columns[number-cols-spanned], +table-column[number-cols-spanned] { + -x-liblayout-colspan: attr(number-cols-spanned); +} + +table-cell[number-rows-spanned], +table-cell[number-rows-spanned] { + -x-liblayout-rowspan: attr(number-rows-spanned); +} + + + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/oasis-text.css b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-text.css new file mode 100644 index 000000000000..fb85c3d1f938 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/oasis-text.css @@ -0,0 +1,27 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +@namespace url("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); + +/** + * All default styles for form elements. +*/ + +p { + display: block; +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/ImageProducer.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/ImageProducer.java new file mode 100644 index 000000000000..c4d545c49d85 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/ImageProducer.java @@ -0,0 +1,488 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output; + +import com.sun.star.awt.Size; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ReportExecutionException; +import org.libreoffice.report.pentaho.DefaultNameGenerator; + +import java.awt.Image; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; + +import java.sql.Blob; +import java.sql.SQLException; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.layouting.input.style.values.CSSNumericType; +import org.jfree.layouting.input.style.values.CSSNumericValue; + +import org.pentaho.reporting.libraries.base.util.IOUtils; +import org.pentaho.reporting.libraries.base.util.PngEncoder; +import org.pentaho.reporting.libraries.base.util.WaitingImageObserver; + + +/** + * This class manages the images embedded in a report. + * + * @since 31.03.2007 + */ +public class ImageProducer +{ + + private static final Log LOGGER = LogFactory.getLog(ImageProducer.class); + + public static class OfficeImage + { + + private final CSSNumericValue width; + private final CSSNumericValue height; + private final String embeddableLink; + + public OfficeImage(final String embeddableLink, final CSSNumericValue width, final CSSNumericValue height) + { + this.embeddableLink = embeddableLink; + this.width = width; + this.height = height; + } + + public CSSNumericValue getWidth() + { + return width; + } + + public CSSNumericValue getHeight() + { + return height; + } + + public String getEmbeddableLink() + { + return embeddableLink; + } + } + + private static class ByteDataImageKey + { + + private final byte[] keyData; + private Integer hashCode; + + protected ByteDataImageKey(final byte[] keyData) + { + if (keyData == null) + { + throw new NullPointerException(); + } + this.keyData = keyData; + } + + public boolean equals(final Object o) + { + if (this != o) + { + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final ByteDataImageKey key = (ByteDataImageKey) o; + if (!Arrays.equals(keyData, key.keyData)) + { + return false; + } + } + + return true; + } + + public int hashCode() + { + if (hashCode != null) + { + return hashCode; + } + + final int length = Math.min(keyData.length, 512); + int hashValue = 0; + for (int i = 0; i < length; i++) + { + final byte b = keyData[i]; + hashValue = b + hashValue * 23; + } + this.hashCode = hashValue; + return hashValue; + } + } + private final Map imageCache; + private final InputRepository inputRepository; + private final OutputRepository outputRepository; + private final ImageService imageService; + + public ImageProducer(final InputRepository inputRepository, + final OutputRepository outputRepository, + final ImageService imageService) + { + if (inputRepository == null) + { + throw new NullPointerException(); + } + if (outputRepository == null) + { + throw new NullPointerException(); + } + if (imageService == null) + { + throw new NullPointerException(); + } + + this.inputRepository = inputRepository; + this.outputRepository = outputRepository; + this.imageService = imageService; + this.imageCache = new HashMap(); + } + + /** + * Image-Data can be one of the following types: String, URL, URI, byte-array, blob. + * + * @param imageData + * @param preserveIRI + * @return + */ + public OfficeImage produceImage(final Object imageData, + final boolean preserveIRI) + { + + LOGGER.debug("Want to produce image " + imageData); + if (imageData instanceof String) + { + return produceFromString((String) imageData, preserveIRI); + } + + if (imageData instanceof URL) + { + return produceFromURL((URL) imageData, preserveIRI); + } + + if (imageData instanceof Blob) + { + return produceFromBlob((Blob) imageData); + } + + if (imageData instanceof byte[]) + { + return produceFromByteArray((byte[]) imageData); + } + + if (imageData instanceof Image) + { + return produceFromImage((Image) imageData); + } + // not usable .. + return null; + } + + private OfficeImage produceFromImage(final Image image) + { + // quick caching ... use a weak list ... + final WaitingImageObserver obs = new WaitingImageObserver(image); + obs.waitImageLoaded(); + + final PngEncoder encoder = new PngEncoder(image, PngEncoder.ENCODE_ALPHA, PngEncoder.FILTER_NONE, 5); + final byte[] data = encoder.pngEncode(); + return produceFromByteArray(data); + } + + private OfficeImage produceFromBlob(final Blob blob) + { + try + { + final InputStream inputStream = blob.getBinaryStream(); + final int length = (int) blob.length(); + + final ByteArrayOutputStream bout = new ByteArrayOutputStream(length); + try + { + IOUtils.getInstance().copyStreams(inputStream, bout); + } finally + { + inputStream.close(); + } + return produceFromByteArray(bout.toByteArray()); + } + catch (IOException e) + { + LOGGER.warn("Failed to produce image from Blob", e); + } + catch (SQLException e) + { + LOGGER.warn("Failed to produce image from Blob", e); + } + return null; + } + + private OfficeImage produceFromByteArray(final byte[] data) + { + final ByteDataImageKey imageKey = new ByteDataImageKey(data); + final OfficeImage o = imageCache.get(imageKey); + if (o != null) + { + return o; + } + + try + { + final String mimeType = imageService.getMimeType(data); + final Size dims = imageService.getImageSize(data); + + // copy the image into the local output-storage + // todo: Implement data-fingerprinting so that we can detect the mime-type + final OutputRepository storage = outputRepository.openOutputRepository("Pictures", null); + final DefaultNameGenerator nameGenerator = new DefaultNameGenerator(storage); + final String name = nameGenerator.generateName("image", mimeType); + final OutputStream outputStream = storage.createOutputStream(name, mimeType); + final ByteArrayInputStream bin = new ByteArrayInputStream(data); + + try + { + IOUtils.getInstance().copyStreams(bin, outputStream); + } finally + { + outputStream.close(); + storage.closeOutputRepository(); + } + + final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); + final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); + final OfficeImage officeImage = new OfficeImage("Pictures/" + name, widthVal, heightVal); + imageCache.put(imageKey, officeImage); + return officeImage; + } + catch (IOException e) + { + LOGGER.warn("Failed to load image from local input-repository", e); + } + catch (ReportExecutionException e) + { + LOGGER.warn("Failed to create image from local input-repository", e); + } + return null; + } + + private OfficeImage produceFromString(final String source, + final boolean preserveIRI) + { + + try + { + final URL url = new URL(source); + return produceFromURL(url, preserveIRI); + } + catch (MalformedURLException e) + { + // ignore .. but we had to try this .. + } + + final OfficeImage o = imageCache.get(source); + if (o != null) + { + return o; + } + + // Next, check whether this is a local path. + if (inputRepository.isReadable(source)) + { + // cool, the file exists. Let's try to read it. + try + { + final ByteArrayOutputStream bout = new ByteArrayOutputStream(8192); + final InputStream inputStream = inputRepository.createInputStream(source); + try + { + IOUtils.getInstance().copyStreams(inputStream, bout); + } finally + { + inputStream.close(); + } + final byte[] data = bout.toByteArray(); + final Size dims = imageService.getImageSize(data); + final String mimeType = imageService.getMimeType(data); + + final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); + final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); + + final String filename = copyToOutputRepository(mimeType, data); + final OfficeImage officeImage = new OfficeImage(filename, widthVal, heightVal); + imageCache.put(source, officeImage); + return officeImage; + } + catch (IOException e) + { + LOGGER.warn("Failed to load image from local input-repository", e); + } + catch (ReportExecutionException e) + { + LOGGER.warn("Failed to create image from local input-repository", e); + } + } + else + { + try + { + URI rootURI = new URI(inputRepository.getRootURL()); + final URI uri = rootURI.resolve(source); + return produceFromURL(uri.toURL(), preserveIRI); + } + catch (URISyntaxException ex) + { + } + catch (MalformedURLException e) + { + // ignore .. but we had to try this .. + } + } + + // Return the image as broken image instead .. + final OfficeImage officeImage = new OfficeImage(source, null, null); + imageCache.put(source, officeImage); + return officeImage; + } + + private OfficeImage produceFromURL(final URL url, + final boolean preserveIRI) + { + final String urlString = url.toString(); + URI uri = null; + try + { + uri = new URI(urlString); + } + catch (URISyntaxException ex) + { + Logger.getLogger(ImageProducer.class.getName()).log(Level.SEVERE, null, ex); + } + final OfficeImage o = imageCache.get(uri); + if (o != null) + { + return o; + } + + try + { + final ByteArrayOutputStream bout = new ByteArrayOutputStream(8192); + final URLConnection urlConnection = url.openConnection(); + final InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream()); + try + { + IOUtils.getInstance().copyStreams(inputStream, bout); + } finally + { + inputStream.close(); + } + final byte[] data = bout.toByteArray(); + + final Size dims = imageService.getImageSize(data); + final String mimeType = imageService.getMimeType(data); + final CSSNumericValue widthVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Width / 100.0); + final CSSNumericValue heightVal = CSSNumericValue.createValue(CSSNumericType.MM, dims.Height / 100.0); + + if (preserveIRI) + { + final OfficeImage retval = new OfficeImage(urlString, widthVal, heightVal); + imageCache.put(uri, retval); + return retval; + } + + final String name = copyToOutputRepository(mimeType, data); + final OfficeImage officeImage = new OfficeImage(name, widthVal, heightVal); + imageCache.put(uri, officeImage); + return officeImage; + } + catch (IOException e) + { + LOGGER.warn("Failed to load image from local input-repository" + e); + } + catch (ReportExecutionException e) + { + LOGGER.warn("Failed to create image from local input-repository" + e); + } + + if (!preserveIRI) + { + final OfficeImage image = new OfficeImage(urlString, null, null); + imageCache.put(uri, image); + return image; + } + + // OK, everything failed; the image is not - repeat it - not usable. + return null; + } + + private String copyToOutputRepository(final String urlMimeType, final byte[] data) + throws IOException, ReportExecutionException + { + final String mimeType; + if (urlMimeType == null) + { + mimeType = imageService.getMimeType(data); + } + else + { + mimeType = urlMimeType; + } + + // copy the image into the local output-storage + final OutputRepository storage = outputRepository.openOutputRepository("Pictures", null); + final DefaultNameGenerator nameGenerator = new DefaultNameGenerator(storage); + final String name = nameGenerator.generateName("image", mimeType); + final OutputStream outputStream = storage.createOutputStream(name, mimeType); + final ByteArrayInputStream bin = new ByteArrayInputStream(data); + + try + { + IOUtils.getInstance().copyStreams(bin, outputStream); + } finally + { + outputStream.close(); + storage.closeOutputRepository(); + } + return "Pictures/" + name; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/OfficeDocumentReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/OfficeDocumentReportTarget.java new file mode 100644 index 000000000000..8d34a5d6cfb2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/OfficeDocumentReportTarget.java @@ -0,0 +1,1722 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.SDBCReportDataFactory; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.layoutprocessor.ImageElementContext; +import org.libreoffice.report.pentaho.model.OfficeDocument; +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.styles.LengthCalculator; +import org.libreoffice.report.pentaho.styles.StyleMapper; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.DocumentBuilder; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import java.awt.Image; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.io.InputStream; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.InflaterInputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.layouting.input.style.parser.CSSValueFactory; +import org.jfree.layouting.input.style.parser.StyleSheetParserUtil; +import org.jfree.layouting.input.style.values.CSSNumericType; +import org.jfree.layouting.input.style.values.CSSNumericValue; +import org.jfree.layouting.layouter.style.CSSValueResolverUtility; +import org.jfree.layouting.namespace.NamespaceDefinition; +import org.jfree.layouting.namespace.Namespaces; +import org.jfree.layouting.util.AttributeMap; +import org.jfree.layouting.util.LazyAttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportBoot; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.AbstractReportTarget; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTargetUtil; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.util.AttributeNameGenerator; +import org.jfree.report.util.IntegerCache; +import org.jfree.report.util.MemoryByteArrayOutputStream; + +import org.pentaho.reporting.libraries.base.util.FastStack; +import org.pentaho.reporting.libraries.base.util.IOUtils; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + +import org.w3c.css.sac.LexicalUnit; + +/** + * Todo: Document me! + * + * @since 08.03.2007 + */ +public abstract class OfficeDocumentReportTarget extends AbstractReportTarget +{ + + protected static final Log LOGGER = LogFactory.getLog(OfficeDocumentReportTarget.class); + public static final String HORIZONTAL_POS = "horizontal-pos"; + public static final String TAG_DEF_PREFIX = "org.libreoffice.report.pentaho.output."; + public static final int ROLE_NONE = 0; + public static final int ROLE_REPORT_HEADER = 1; + public static final int ROLE_REPORT_FOOTER = 2; + public static final int ROLE_GROUP_HEADER = 3; + public static final int ROLE_GROUP_FOOTER = 4; + public static final int ROLE_REPEATING_GROUP_HEADER = 5; + public static final int ROLE_REPEATING_GROUP_FOOTER = 6; + public static final int ROLE_PAGE_HEADER = 7; + public static final int ROLE_PAGE_FOOTER = 8; + public static final int ROLE_DETAIL = 9; + public static final int ROLE_VARIABLES = 10; + public static final int ROLE_TEMPLATE = 11; + public static final int ROLE_SPREADSHEET_PAGE_HEADER = 12; + public static final int ROLE_SPREADSHEET_PAGE_FOOTER = 13; + public static final int STATE_IN_DOCUMENT = 0; + public static final int STATE_IN_BODY = 1; + public static final int STATE_IN_CONTENT = 2; + public static final int STATE_IN_GROUP = 3; + public static final int STATE_IN_GROUP_BODY = 4; + public static final int STATE_IN_SECTION = 5; + public static final int STATE_IN_OTHER = 6; + public static final int STATE_IN_GROUP_INSTANCE = 7; + public static final String FAILED = "Failed"; + public static final String VERTICAL_POS = "vertical-pos"; + private static final String ZERO_CM = "0cm"; + /** the verison of the ODF specification to which generated documents + * shall conform. */ + public static final String ODF_VERSION = "1.2"; + + protected static class BufferState + { + + private final XmlWriter xmlWriter; + private final MemoryByteArrayOutputStream xmlBuffer; + private final OfficeStylesCollection stylesCollection; + + protected BufferState(final XmlWriter xmlWriter, + final MemoryByteArrayOutputStream xmlBuffer, + final OfficeStylesCollection stylesCollection) + { + this.stylesCollection = stylesCollection; + this.xmlWriter = xmlWriter; + this.xmlBuffer = xmlBuffer; + } + + public OfficeStylesCollection getStylesCollection() + { + return stylesCollection; + } + + public XmlWriter getXmlWriter() + { + return xmlWriter; + } + + public String getXmlBuffer() throws ReportProcessingException + { + try + { + final byte[] zippedData = xmlBuffer.getRaw(); + final InputStreamReader reader = new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(zippedData, 0, xmlBuffer.getLength())), "UTF-16"); + final StringWriter writer = new StringWriter((zippedData.length / 2) + 1); + IOUtils.getInstance().copyWriter(reader, writer); + return writer.toString(); + } + catch (IOException e) + { + throw new ReportProcessingException("Failed to copy buffer", e); + } + } + + public Reader getXmlAsReader() throws ReportProcessingException + { + try + { + final byte[] zippedData = xmlBuffer.getRaw(); + return new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(zippedData, 0, xmlBuffer.getLength())), "UTF-16"); + } + catch (IOException e) + { + throw new ReportProcessingException("Failed to copy buffer", e); + } + } + } + + protected static class GroupContext + { + + private final GroupContext parent; + private int iterationCount; + private boolean groupWithRepeatingSection; + + protected GroupContext(final GroupContext parent) + { + this.parent = parent; + } + + public GroupContext getParent() + { + return parent; + } + + public int getIterationCount() + { + return iterationCount; + } + + public void setIterationCount(final int iterationCount) + { + this.iterationCount = iterationCount; + } + + public boolean isGroupWithRepeatingSection() + { + return groupWithRepeatingSection; + } + + public void setGroupWithRepeatingSection(final boolean groupWithRepeatingSection) + { + this.groupWithRepeatingSection = groupWithRepeatingSection; + } + + public String toString() + { + return "GroupContext{" + "parent=" + parent + ", iterationCount=" + iterationCount + ", groupWithRepeatingSection=" + groupWithRepeatingSection + '}'; + } + } + private final FastStack states; + private int currentRole; + private final FastStack xmlWriters; + private XmlWriter rootXmlWriter; + /** + * This styles-collection contains all styles that were predefined in the report definition file. The common styles + * and the master-styles will be written unmodified, the automatic styles will be ignored. + */ + private OfficeStylesCollection predefinedStylesCollection; + /** + * This styles-collection contains all master-styles that have been generated by the report definition process. It + * also contains all automatic styles that have been generated for the page-bands (and the pagebands as well). + */ + private OfficeStylesCollection globalStylesCollection; + /** + * The content styles collection contains all automatic styles that have been generated for the normal-flow content. + */ + private OfficeStylesCollection contentStylesCollection; + private final OutputRepository outputRepository; + private final InputRepository inputRepository; + private final AttributeNameGenerator tableNameGenerator; + private final AttributeNameGenerator frameNameGenerator; + private final AttributeNameGenerator autoStyleNameGenerator; + private final String target; + private static final int INITIAL_BUFFER_SIZE = 40960; + private StyleMapper styleMapper; + private StyleSheetParserUtil styleSheetParserUtil; + private final AttributeNameGenerator imageNames; + private final ImageProducer imageProducer; + private final OleProducer oleProducer; + private GroupContext groupContext; + private static final boolean DEBUG_ELEMENTS = + JFreeReportBoot.getInstance().getExtendedConfig().getBoolProperty("org.libreoffice.report.pentaho.output.DebugElements"); + + protected OfficeDocumentReportTarget(final ReportJob reportJob, + final ResourceManager resourceManager, + final ResourceKey baseResource, + final InputRepository inputRepository, + final OutputRepository outputRepository, + final String target, + final ImageService imageService, + final DataSourceFactory datasourcefactory) + throws ReportProcessingException + { + super(reportJob, resourceManager, baseResource); + if (imageService == null) + { + throw new NullPointerException("ImageService must not be null"); + } + if (target == null) + { + throw new NullPointerException("Target-Name must not be null"); + } + + this.target = target; + + this.tableNameGenerator = new AttributeNameGenerator(); + this.frameNameGenerator = new AttributeNameGenerator(); + this.autoStyleNameGenerator = new AttributeNameGenerator(); + this.outputRepository = outputRepository; + this.inputRepository = inputRepository; + this.states = new FastStack(); + this.xmlWriters = new FastStack(); + this.imageNames = new AttributeNameGenerator(); + + this.imageProducer = new ImageProducer(inputRepository, outputRepository, imageService); + this.oleProducer = new OleProducer(inputRepository, outputRepository, imageService, datasourcefactory, (Integer) reportJob.getParameters().get(ReportEngineParameterNames.MAXROWS)); + + try + { + final ResourceManager realResourceManager = getResourceManager(); + styleMapper = StyleMapper.loadInstance(realResourceManager); + } + catch (ResourceException e) + { + throw new ReportProcessingException("Failed to load style-mapper", e); + } + } + + protected abstract String getTargetMimeType(); + + protected OutputRepository getOutputRepository() + { + return outputRepository; + } + + protected InputRepository getInputRepository() + { + return inputRepository; + } + + /** + * Starts the output of a new office document. This method writes the generic 'office:document-content' tag along with + * all known namespace declarations. + * + * @param report the report object. + * @throws DataSourceException if there was an error accessing the datasource + * @throws ReportProcessingException if some other error occured. + */ + public void startReport(final ReportStructureRoot report) + throws DataSourceException, ReportProcessingException + { + imageNames.reset(); + this.groupContext = new GroupContext(null); + + final DefaultTagDescription tagDescription = createTagDescription(); + try + { + final OutputStream outputStream = outputRepository.createOutputStream(target, "text/xml"); + final Writer writer = new OutputStreamWriter(outputStream, "UTF-8"); + + this.rootXmlWriter = new XmlWriter(writer, tagDescription); + this.rootXmlWriter.setAlwaysAddNamespace(true); + + final AttributeList rootAttributes = new AttributeList(); + rootAttributes.addNamespaceDeclaration("office", OfficeNamespaces.OFFICE_NS); + rootAttributes.addNamespaceDeclaration("style", OfficeNamespaces.STYLE_NS); + rootAttributes.addNamespaceDeclaration("text", OfficeNamespaces.TEXT_NS); + rootAttributes.addNamespaceDeclaration("table", OfficeNamespaces.TABLE_NS); + rootAttributes.addNamespaceDeclaration("draw", OfficeNamespaces.DRAWING_NS); + rootAttributes.addNamespaceDeclaration("fo", OfficeNamespaces.FO_NS); + rootAttributes.addNamespaceDeclaration("xlink", OfficeNamespaces.XLINK_NS); + rootAttributes.addNamespaceDeclaration("dc", OfficeNamespaces.PURL_NS); + rootAttributes.addNamespaceDeclaration("meta", OfficeNamespaces.META_NS); + rootAttributes.addNamespaceDeclaration("number", OfficeNamespaces.DATASTYLE_NS); + rootAttributes.addNamespaceDeclaration("svg", OfficeNamespaces.SVG_NS); + rootAttributes.addNamespaceDeclaration("chart", OfficeNamespaces.CHART_NS); + rootAttributes.addNamespaceDeclaration("chartooo", OfficeNamespaces.CHARTOOO_NS); + rootAttributes.addNamespaceDeclaration("dr3d", OfficeNamespaces.DR3D_NS); + rootAttributes.addNamespaceDeclaration("math", OfficeNamespaces.MATHML_NS); + rootAttributes.addNamespaceDeclaration("form", OfficeNamespaces.FORM_NS); + rootAttributes.addNamespaceDeclaration("script", OfficeNamespaces.SCRIPT_NS); + rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); + rootAttributes.addNamespaceDeclaration("ooow", OfficeNamespaces.OOW2004_NS); + rootAttributes.addNamespaceDeclaration("oooc", OfficeNamespaces.OOC2004_NS); + rootAttributes.addNamespaceDeclaration("dom", OfficeNamespaces.XML_EVENT_NS); + rootAttributes.addNamespaceDeclaration("xforms", OfficeNamespaces.XFORMS_NS); + rootAttributes.addNamespaceDeclaration("xsd", OfficeNamespaces.XSD_NS); + rootAttributes.addNamespaceDeclaration("xsi", OfficeNamespaces.XSI_NS); + rootAttributes.addNamespaceDeclaration("grddl", OfficeNamespaces.GRDDL_NS); + rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", + ODF_VERSION); + + this.rootXmlWriter.writeXmlDeclaration("UTF-8"); + this.rootXmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "document-content", rootAttributes, XmlWriterSupport.OPEN); + + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_DOCUMENT)); + + autoStyleNameGenerator.reset(); + tableNameGenerator.reset(); + frameNameGenerator.reset(); + + final OfficeDocument reportDoc = (OfficeDocument) report; + predefinedStylesCollection = reportDoc.getStylesCollection(); + + final OfficeStyles commonStyles = predefinedStylesCollection.getCommonStyles(); + if (!commonStyles.containsStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS)) + { + final OfficeStyle graphicsDefaultStyle = new OfficeStyle(); + graphicsDefaultStyle.setStyleFamily(OfficeToken.GRAPHIC); + graphicsDefaultStyle.setStyleName(OfficeToken.GRAPHICS); + final Element graphicProperties = produceFirstChild(graphicsDefaultStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); + graphicProperties.setAttribute(OfficeNamespaces.TEXT_NS, "anchor-type", OfficeToken.PARAGRAPH); + graphicProperties.setAttribute(OfficeNamespaces.SVG_NS, "x", ZERO_CM); + graphicProperties.setAttribute(OfficeNamespaces.SVG_NS, "y", ZERO_CM); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "wrap", "dynamic"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "number-wrapped-paragraphs", "no-limit"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "wrap-contour", OfficeToken.FALSE); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, VERTICAL_POS, "from-top"); // changed for chart + + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-rel", OfficeToken.PARAGRAPH); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, HORIZONTAL_POS, "from-left"); // changed for chart + + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "horizontal-rel", OfficeToken.PARAGRAPH); + commonStyles.addStyle(graphicsDefaultStyle); + } + + // Make sure that later generated styles do not overwrite existing styles. + fillStyleNameGenerator(predefinedStylesCollection); + + contentStylesCollection = new OfficeStylesCollection(); + globalStylesCollection = new OfficeStylesCollection(); + + startBuffering(contentStylesCollection, true); + } + catch (IOException e) + { + throw new ReportProcessingException(FAILED, e); + } + } + + protected AttributeNameGenerator getAutoStyleNameGenerator() + { + return autoStyleNameGenerator; + } + + private void fillStyleNameGenerator(final OfficeStylesCollection stylesCollection) + { + final OfficeStyles commonStyles = stylesCollection.getCommonStyles(); + final OfficeStyle[] allCommonStyles = commonStyles.getAllStyles(); + for (int i = 0; i < allCommonStyles.length; i++) + { + final OfficeStyle style = allCommonStyles[i]; + autoStyleNameGenerator.generateName(style.getStyleName()); + } + + final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); + final OfficeStyle[] allAutoStyles = autoStyles.getAllStyles(); + for (int i = 0; i < allAutoStyles.length; i++) + { + final OfficeStyle style = allAutoStyles[i]; + autoStyleNameGenerator.generateName(style.getStyleName()); + } + } + + public OfficeStylesCollection getPredefinedStylesCollection() + { + return predefinedStylesCollection; + } + + public OfficeStylesCollection getGlobalStylesCollection() + { + return globalStylesCollection; + } + + public OfficeStylesCollection getContentStylesCollection() + { + return contentStylesCollection; + } + + /** + * Returns the XML-Writer tag description. This description defines whether an element can have character data inside. + * Such element will disable the indention, as in that case the additional whitespaces might alter the meaning of the + * element's contents. + * + * @return the tag description library. + */ + protected DefaultTagDescription createTagDescription() + { + final DefaultTagDescription tagDescription = new DefaultTagDescription(); + tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), + OfficeDocumentReportTarget.TAG_DEF_PREFIX); + return tagDescription; + } + + /** + * Returns the current processing state. + * + * @return the processing state. + */ + protected int getCurrentState() + { + if (states.isEmpty()) + { + throw new IllegalStateException(); + } + final Integer o = (Integer) states.peek(); + return o; + } + + /** + * Starts the processing of an element and updates the processing state. This will select an apropriate handler method + * for the call and will call one of the start* methods. + * + * @param roAttrs the attribute map for the current element + * @throws DataSourceException + * @throws ReportProcessingException + */ + public final void startElement(final AttributeMap roAttrs) + throws DataSourceException, ReportProcessingException + { + final AttributeMap attrs = new LazyAttributeMap(roAttrs); + // todo + if (DEBUG_ELEMENTS) + { + LOGGER.debug("Starting " + getCurrentState() + '/' + states.size() + ' ' + ReportTargetUtil.getNamespaceFromAttribute(attrs) + " -> " + ReportTargetUtil.getElemenTypeFromAttribute(attrs)); + } + try + { + switch (getCurrentState()) + { + case OfficeDocumentReportTarget.STATE_IN_DOCUMENT: + { + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OFFICE_NS, "body", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_BODY)); + startBody(attrs); + } + else + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); + if (!isFilteredNamespace(ReportTargetUtil.getNamespaceFromAttribute(attrs))) + { + startOther(attrs); + } + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_BODY: + { + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OFFICE_NS, "report", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_CONTENT)); + startContent(attrs); + } + else + { + throw new IllegalStateException("The 'office:body' element must have exactly one child of type 'report'"); + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_CONTENT: + { + // Either a ordinary section or a group .. + // A group. + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "report-body", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_BODY)); + startGroupBody(attrs); + } + else + { + // Either a template-section, page-header, page-footer, report-header, report-footer + // or variables-section + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "template", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_TEMPLATE; + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "page-header", attrs)) + { + if ("spreadsheet-section".equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role"))) + { + currentRole = OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER; + } + else + { + currentRole = OfficeDocumentReportTarget.ROLE_PAGE_HEADER; + } + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "page-footer", attrs)) + { + if ("spreadsheet-section".equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "role"))) + { + currentRole = OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER; + } + else + { + currentRole = OfficeDocumentReportTarget.ROLE_PAGE_FOOTER; + } + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "report-header", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_REPORT_HEADER; + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "report-footer", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_REPORT_FOOTER; + } + else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; + } + else + { + throw new IllegalStateException("Expected either 'template', 'report-body', " + "'report-header', 'report-footer', 'variables-section', 'page-header' or 'page-footer'"); + } + startReportSection(attrs, currentRole); + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP_BODY: + { + // We now expect either an other group or a detail band. + + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP)); + groupContext = new GroupContext(groupContext); + startGroup(attrs); + } + else + { + // Either a variables-section, or a detail-band + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "detail", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_DETAIL; + } + else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; + } + else + { + throw new IllegalStateException("Expected either 'group', 'detail' or 'variables-section'"); + } + startReportSection(attrs, currentRole); + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP: + { + // A group can carry a repeating group header/footer or a group-instance section. + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "group-instance", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE)); + startGroupInstance(attrs); + } + else + { + // repeating group header/footer, but *no* variables section + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-header", attrs) && OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section"))) + { + currentRole = OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER; + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-footer", attrs) && OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeated-section"))) + { + currentRole = OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER; + } + else + { + throw new IllegalStateException("Expected either 'group-instance', " + "'repeating group-header' or 'repeating group-footer'"); + } + startReportSection(attrs, currentRole); + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE: + { + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "group-body", attrs)) + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_GROUP_BODY)); + startGroupBody(attrs); + } + else + { + // Either a group-header or group-footer or variables-section + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_SECTION)); + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-header", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_GROUP_HEADER; + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.OOREPORT_NS, "group-footer", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_GROUP_FOOTER; + } + else if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, "variables-section", attrs)) + { + currentRole = OfficeDocumentReportTarget.ROLE_VARIABLES; + } + else + { + throw new IllegalStateException("Expected either 'group-body', 'group-header', 'group-footer' or 'variables-section'"); + } + startReportSection(attrs, currentRole); + } + break; + } + case OfficeDocumentReportTarget.STATE_IN_SECTION: + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); + startOther(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_OTHER: + { + states.push(IntegerCache.getInteger(OfficeDocumentReportTarget.STATE_IN_OTHER)); + startOther(attrs); + break; + } + default: + throw new IllegalStateException("Failure: " + getCurrentState()); + } + } + catch (IOException ioe) + { + LOGGER.error("ReportProcessing failed", ioe); + throw new ReportProcessingException("Failed to write content", ioe); + } +// finally +// { +// LOGGER.debug ("Started " + getNamespaceFromAttribute(attrs) + ":" + +// getElemenTypeFromAttribute(attrs) + " -> " + getCurrentState()); +// } + } + + protected GroupContext getGroupContext() + { + return groupContext; + } + + protected void performStyleProcessing(final AttributeMap attrs) + throws ReportProcessingException + { + final OfficeStylesCollection stylesCollection = getStylesCollection(); + final OfficeStylesCollection predefCollection = getPredefinedStylesCollection(); + final OfficeStylesCollection globalStylesCollection = getGlobalStylesCollection(); + + final String elementNamespace = + ReportTargetUtil.getNamespaceFromAttribute(attrs); + final String elementName = + ReportTargetUtil.getElemenTypeFromAttribute(attrs); + + final String[] namespaces = attrs.getNameSpaces(); + for (int i = 0; i < namespaces.length; i++) + { + final String attrNamespace = namespaces[i]; + if (isFilteredNamespace(attrNamespace)) + { + continue; + } + + final Map attributes = attrs.getAttributes(attrNamespace); + final Iterator iterator = attributes.entrySet().iterator(); + while (iterator.hasNext()) + { + final Map.Entry entry = (Map.Entry) iterator.next(); + final String attrName = (String) entry.getKey(); + final String attrValue = String.valueOf(entry.getValue()); + + final String styleFamily = styleMapper.getStyleFamilyFor(elementNamespace, elementName, attrNamespace, attrName); + if (styleFamily == null) + { + // None of the known style attributes. + continue; + } + + if (styleMapper.isListOfStyles(elementNamespace, elementName, attrNamespace, attrName)) + { + // ignored for now. + LOGGER.warn("List of styles is not yet implemented."); + continue; + } + + // Copy styles is only called once per style. + StyleUtilities.copyStyle(styleFamily, attrValue, stylesCollection, globalStylesCollection, predefCollection); + } + } + } + + protected void startBody(final AttributeMap attrs) + throws IOException + { + getXmlWriter().writeTag(OfficeNamespaces.OFFICE_NS, "body", XmlWriterSupport.OPEN); + } + + private final boolean allowBuffering(final int role) + { + return (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER || role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_TEMPLATE); + } + + protected void startReportSection(final AttributeMap attrs, final int role) + throws IOException, DataSourceException, ReportProcessingException + { + if (allowBuffering(role)) + { + startBuffering(new OfficeStylesCollection(), true); + } + } + + protected abstract void startContent(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException; + + protected void startGroup(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + final Object repeatingHeaderOrFooter = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "repeating-header-or-footer"); + if (OfficeToken.TRUE.equals(repeatingHeaderOrFooter)) + { + getGroupContext().setGroupWithRepeatingSection(true); + } + + final Object iterationCount = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "iteration-count"); + if (iterationCount instanceof Number) + { + final Number itNumber = (Number) iterationCount; + getGroupContext().setIterationCount(itNumber.intValue()); + } + } + + protected void startGroupInstance(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected void startGroupBody(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected abstract void startOther(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException; + + public void processText(final String text) + throws DataSourceException, ReportProcessingException + { + try + { + final XmlWriter xmlWriter = getXmlWriter(); + final BufferedReader br = new BufferedReader(new StringReader(text)); + String line = br.readLine(); + while (line != null) + { + xmlWriter.writeTextNormalized(line, false); + line = br.readLine(); + if (line != null) + { + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, "line-break", XmlWriterSupport.CLOSE); + } + } + } + catch (IOException e) + { + throw new ReportProcessingException(FAILED, e); + } + } + + protected boolean isFilteredNamespace(final String namespace) + { + if (Namespaces.LIBLAYOUT_NAMESPACE.equals(namespace)) + { + return true; + } + if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) + { + return true; + } + if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) + { + return true; + } + if (JFreeReportInfo.COMPATIBILITY_NAMESPACE.equals(namespace)) + { + return true; + } + if (OfficeNamespaces.OOREPORT_NS.equals(namespace)) + { + return true; + } + return false; + } + + public void processContent(final DataFlags value) + throws DataSourceException, ReportProcessingException + { + final Object rawvalue = value.getValue(); + if (rawvalue == null) + { + return; + } + + // special handler for image (possibly also for URL ..) + if (rawvalue instanceof Image) + { + // do nothing yet. We should define something for that later .. + return; + } + + final XmlWriter xmlWriter = getXmlWriter(); + final String text = String.valueOf(rawvalue); + try + { + final BufferedReader br = new BufferedReader(new StringReader(text)); + String line = br.readLine(); + while (line != null) + { + xmlWriter.writeTextNormalized(line, false); + line = br.readLine(); + if (line != null) + { + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, "line-break", XmlWriterSupport.CLOSE); + } + } + } + catch (IOException e) + { + throw new ReportProcessingException(FAILED, e); + } + } + + public final void endElement(final AttributeMap roAttrs) + throws DataSourceException, ReportProcessingException + { + final AttributeMap attrs = new LazyAttributeMap(roAttrs); + // final int oldState = getCurrentState(); + try + { + + switch (getCurrentState()) + { + case OfficeDocumentReportTarget.STATE_IN_OTHER: + { + endOther(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_SECTION: + { + endReportSection(attrs, currentRole); + currentRole = OfficeDocumentReportTarget.ROLE_NONE; + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP: + { + endGroup(attrs); + groupContext = groupContext.getParent(); + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP_INSTANCE: + { + endGroupInstance(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_GROUP_BODY: + { + endGroupBody(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_CONTENT: + { + endContent(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_BODY: + { + endBody(attrs); + break; + } + case OfficeDocumentReportTarget.STATE_IN_DOCUMENT: + { + throw new IllegalStateException("This cannot be."); + } + default: + { + throw new IllegalStateException("Invalid state encountered."); + } + } + } + catch (IOException ioe) + { + throw new ReportProcessingException("IO Error while writing content", + ioe); + } finally + { + states.pop(); + + if (DEBUG_ELEMENTS) + { + LOGGER.debug("Finished " + getCurrentState() + "/" + states.size() + " " + ReportTargetUtil.getNamespaceFromAttribute(attrs) + ":" + ReportTargetUtil.getElemenTypeFromAttribute(attrs)); + } + + } + } + + protected void endGroupBody(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected void endGroupInstance(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + } + + public int getCurrentRole() + { + return currentRole; + } + + protected abstract void endOther(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException; + + protected void endReportSection(final AttributeMap attrs, + final int role) + throws IOException, DataSourceException, ReportProcessingException + { + if (allowBuffering(role)) + { + finishBuffering(); + } + } + + protected void endGroup(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected abstract void endContent(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException; + + protected void endBody(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + getXmlWriter().writeCloseTag(); + } + + public void copyMeta() + { + // now copy the meta.xml + if (getInputRepository().isReadable("meta.xml")) + { + InputStream inputStream = null; + try + { + inputStream = getInputRepository().createInputStream("meta.xml"); + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document document = dBuilder.parse(new InputSource(inputStream)); + + NodeList nl = document.getElementsByTagName("document-meta/meta/generator"); + Node node = document.getFirstChild().getFirstChild().getFirstChild().getFirstChild(); + String creator = node.getNodeValue(); + node.setNodeValue(creator + "/report_builder"); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); + + final OutputStream outputMetaStream = getOutputRepository().createOutputStream("meta.xml", "text/xml"); + StreamResult result = new StreamResult(outputMetaStream); + DOMSource source = new DOMSource(document); + transformer.transform(source, result); + + //IOUtils.getInstance().copyStreams(inputStream, outputMetaStream); + outputMetaStream.flush(); + outputMetaStream.close(); + } + catch (java.lang.Exception ex) + { + } finally + { + if (inputStream != null) + { + try + { + inputStream.close(); + } + catch (IOException ex) + { + Logger.getLogger(OfficeDocumentReportTarget.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + } + } + + public void endReport(final ReportStructureRoot report) + throws DataSourceException, ReportProcessingException + { + if (xmlWriters.size() != 1) + { + throw new IllegalStateException("Invalid writer-stack state"); + } + + try + { + final StylesWriter inlineStylesWriter = new StylesWriter(rootXmlWriter); + inlineStylesWriter.writeContentStyles(predefinedStylesCollection, contentStylesCollection); + + final BufferState state = finishBuffering(); + this.rootXmlWriter.writeStream(state.getXmlAsReader()); + + final OutputStream stylesOutStream = + outputRepository.createOutputStream("styles.xml", "text/xml"); + final OutputStreamWriter osw = + new OutputStreamWriter(stylesOutStream, "UTF-8"); + final StylesWriter stylesWriter = new StylesWriter(osw); + stylesWriter.writeGlobalStyles(predefinedStylesCollection, globalStylesCollection); + stylesWriter.close(); + + this.rootXmlWriter.writeCloseTag(); + this.rootXmlWriter.close(); + } + catch (IOException e) + { + throw new ReportProcessingException(FAILED, e); + } + } + + public XmlWriter getXmlWriter() + { + final BufferState bufferState = (BufferState) xmlWriters.peek(); + return bufferState.getXmlWriter(); + } + + public OfficeStylesCollection getStylesCollection() + { + final BufferState bufferState = (BufferState) xmlWriters.peek(); + return bufferState.getStylesCollection(); + } + + public void startBuffering(final OfficeStylesCollection stylesCollection, + final boolean indent) throws ReportProcessingException + { + final XmlWriter currentWriter; + if (xmlWriters.isEmpty()) + { + currentWriter = rootXmlWriter; + } + else + { + final BufferState bufferState = (BufferState) xmlWriters.peek(); + currentWriter = bufferState.getXmlWriter(); + } + + try + { + final MemoryByteArrayOutputStream out = + new MemoryByteArrayOutputStream(INITIAL_BUFFER_SIZE, 256 * INITIAL_BUFFER_SIZE); + final DeflaterOutputStream deflateOut = new DeflaterOutputStream(out); + final OutputStreamWriter xmlBuffer = new OutputStreamWriter(deflateOut, "UTF-16"); + // final StringWriter xmlBuffer = new StringWriter + // (OfficeDocumentReportTarget.INITIAL_BUFFER_SIZE); + final XmlWriter contentXmlWriter = new XmlWriter(xmlBuffer, createTagDescription()); + contentXmlWriter.copyNamespaces(currentWriter); + if (indent) + { + contentXmlWriter.setAdditionalIndent(currentWriter.getCurrentIndentLevel()); + contentXmlWriter.setWriteFinalLinebreak(true); + } + else + { + contentXmlWriter.setWriteFinalLinebreak(false); + } + contentXmlWriter.setAlwaysAddNamespace(true); + xmlWriters.push(new BufferState(contentXmlWriter, out, stylesCollection)); + } + catch (IOException ioe) + { + throw new ReportProcessingException("Unable to create the buffer", ioe); + } + } + + public BufferState finishBuffering() throws ReportProcessingException + { + final BufferState state = (BufferState) xmlWriters.pop(); + try + { + state.getXmlWriter().close(); + } + catch (IOException e) + { + LOGGER.error("ReportProcessing failed", e); + } + return state; + } + + public void commit() + throws ReportProcessingException + { + // do not call flush before the report is fully finished. Every flush + // causes the Office-Backend to fully ZIP all contents (it acts like a + // 'Save' call from the UI) and that's expensive like hell + } + + public NamespaceDefinition getNamespaceByUri(final String uri) + { + return null; + } + + protected AttributeList buildAttributeList(final AttributeMap attrs) + { + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + final AttributeList attrList = new AttributeList(); + final String[] namespaces = attrs.getNameSpaces(); + for (int i = 0; i < namespaces.length; i++) + { + final String attrNamespace = namespaces[i]; + if (isFilteredNamespace(attrNamespace)) + { + continue; + } + + final Map localAttributes = attrs.getAttributes(attrNamespace); + final Iterator entries = localAttributes.entrySet().iterator(); + while (entries.hasNext()) + { + final Map.Entry entry = (Map.Entry) entries.next(); + final String key = String.valueOf(entry.getKey()); + if (OfficeNamespaces.TABLE_NS.equals(attrNamespace) && "name".equals(key)) + { + final String tableName = String.valueOf(entry.getValue()); + final String saneName = sanitizeName(tableName); + attrList.setAttribute(attrNamespace, key, + tableNameGenerator.generateName(saneName)); + } + else if (OfficeNamespaces.DRAWING_NS.equals(attrNamespace) && "name".equals(key) && !"equation".equals(elementType)) + { + final String objectName = String.valueOf(entry.getValue()); + attrList.setAttribute(attrNamespace, key, + frameNameGenerator.generateName(objectName)); + } + else + { + attrList.setAttribute(attrNamespace, key, String.valueOf(entry.getValue())); + } + } + } + return attrList; + } + + protected String sanitizeName(final String name) + { + // A table name cannot contain spaces and should only contain + // ascii-characters. + if (name == null) + { + return ""; + } + final char[] chars = name.toCharArray(); + final StringBuffer buffer = new StringBuffer(); + for (int i = 0; i < chars.length; i++) + { + final char aChar = chars[i]; + if (Character.isWhitespace(aChar)) + { + buffer.append('_'); + } + else + { + buffer.append(aChar); + } + } + return buffer.toString(); + } + + /** + * Returns the length in point. This method is f**king slow, it eats half of the processing time. I surely should + * replace it with something more efficient later. + * + * @param text + * @return + */ + protected CSSNumericValue parseLength(final String text) + { + if (styleSheetParserUtil == null) + { + styleSheetParserUtil = StyleSheetParserUtil.getInstance(); + } + + final LexicalUnit cssValue = styleSheetParserUtil.parseLexicalStyleValue( + text); + return CSSValueFactory.createLengthValue(cssValue); + } + + protected boolean isRepeatingSection() + { + return (currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER || currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER || currentRole == OfficeDocumentReportTarget.ROLE_PAGE_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_VARIABLES); + + } + + protected OfficeStyle deriveStyle(final String styleFamily, final String styleName) + throws ReportProcessingException + { + // autogenerate a style. The style has already been added to the current + // auto-collection. + final OfficeStyle style = StyleUtilities.deriveStyle(styleFamily, styleName, + getStylesCollection(), getGlobalStylesCollection(), + getPredefinedStylesCollection(), getAutoStyleNameGenerator()); + return style; + } + + protected void startImageProcessing(final AttributeMap attrs) + throws ReportProcessingException + { + final Object imageData = attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.IMAGE_DATA); + final boolean preserveIRI = OfficeToken.TRUE.equals(attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.PRESERVE_IRI)); + + // for the first shot, do nothing fancy .. + final ImageProducer.OfficeImage image = imageProducer.produceImage(imageData, preserveIRI); + if (image != null) + { + final ImageElementContext imageContext = (ImageElementContext) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "image-context"); + + // When scaling, we have to create an image-style. + final CSSNumericValue width = image.getWidth(); // always in 100th of a mm + + final CSSNumericValue height = image.getHeight(); // always in 100th of a mm + + LOGGER.debug("Image " + imageData + " Width: " + width + ", Height: " + height); + if (width == null || height == null) + { + return; + } + + CSSNumericValue imageAreaWidthVal; + CSSNumericValue imageAreaHeightVal; + CSSNumericValue posX = CSSNumericValue.createValue(CSSNumericType.CM, 0.0); + CSSNumericValue posY = CSSNumericValue.createValue(CSSNumericType.CM, 0.0); + + String styleName = null; + if (imageContext != null) + { + imageAreaWidthVal = computeImageWidth(imageContext); + imageAreaHeightVal = computeImageHeight(imageContext); + + if (imageAreaWidthVal == null || imageAreaHeightVal == null) + { + LOGGER.debug("Image data returned from context is invalid. Maybe this is not an image?"); + return; + } + else + { + // compute the clip-area .. + final CSSNumericValue normalizedImageWidth = + CSSValueResolverUtility.convertLength(width, imageAreaWidthVal.getType()); + final CSSNumericValue normalizedImageHeight = + CSSValueResolverUtility.convertLength(height, imageAreaHeightVal.getType()); + + final String scale = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.SCALE); + if (OfficeToken.NONE.equals(scale) && normalizedImageWidth.getValue() > 0 && normalizedImageHeight.getValue() > 0) + { + final double clipWidth = normalizedImageWidth.getValue() - imageAreaWidthVal.getValue(); + final double clipHeight = normalizedImageHeight.getValue() - imageAreaHeightVal.getValue(); + if (clipWidth > 0 && clipHeight > 0) + { + final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); + final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); + final StringBuffer buffer = new StringBuffer(); + buffer.append("rect("); + buffer.append(clipHeight / 2); + buffer.append(imageAreaHeightVal.getType().getType()); + buffer.append(' '); + buffer.append(clipWidth / 2); + buffer.append(imageAreaWidthVal.getType().getType()); + buffer.append(' '); + buffer.append(clipHeight / 2); + buffer.append(imageAreaHeightVal.getType().getType()); + buffer.append(' '); + buffer.append(clipWidth / 2); + buffer.append(imageAreaWidthVal.getType().getType()); + buffer.append(')'); + graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); + + styleName = imageStyle.getStyleName(); + getStylesCollection().getAutomaticStyles().addStyle(imageStyle); + } + else if (clipWidth > 0) + { + final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); + final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); + final StringBuffer buffer = new StringBuffer(); + buffer.append("rect(0cm "); + buffer.append(clipWidth / 2); + buffer.append(imageAreaWidthVal.getType().getType()); + buffer.append(" 0cm "); + buffer.append(clipWidth / 2); + buffer.append(imageAreaWidthVal.getType().getType()); + buffer.append(')'); + graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); + + styleName = imageStyle.getStyleName(); + getStylesCollection().getAutomaticStyles().addStyle(imageStyle); + imageAreaHeightVal = normalizedImageHeight; + } + else if (clipHeight > 0) + { + final OfficeStyle imageStyle = deriveStyle(OfficeToken.GRAPHIC, OfficeToken.GRAPHICS); + final Element graphProperties = produceFirstChild(imageStyle, OfficeNamespaces.STYLE_NS, OfficeToken.GRAPHIC_PROPERTIES); + final StringBuffer buffer = new StringBuffer(); + buffer.append("rect("); + buffer.append(clipHeight / 2); + buffer.append(imageAreaHeightVal.getType().getType()); + buffer.append(" 0cm "); + buffer.append(clipHeight / 2); + buffer.append(imageAreaHeightVal.getType().getType()); + buffer.append(" 0cm)"); + graphProperties.setAttribute(OfficeNamespaces.FO_NS, "clip", buffer.toString()); + + styleName = imageStyle.getStyleName(); + getStylesCollection().getAutomaticStyles().addStyle(imageStyle); + imageAreaWidthVal = normalizedImageWidth; + } + else + { + imageAreaWidthVal = normalizedImageWidth; + imageAreaHeightVal = normalizedImageHeight; + } + } + else if (OfficeToken.ISOTROPIC.equals(scale)) + { + final double[] ret = calcPaintSize(imageAreaWidthVal, imageAreaHeightVal, normalizedImageWidth, normalizedImageHeight); + + posX = CSSNumericValue.createValue(imageAreaWidthVal.getType(), (imageAreaWidthVal.getValue() - ret[0]) * 0.5); + posY = CSSNumericValue.createValue(imageAreaHeightVal.getType(), (imageAreaHeightVal.getValue() - ret[1]) * 0.5); + + imageAreaWidthVal = CSSNumericValue.createValue(imageAreaWidthVal.getType(), ret[0]); + imageAreaHeightVal = CSSNumericValue.createValue(imageAreaHeightVal.getType(), ret[1]); + } + } + // If we do scale, then we simply use the given image-area-size as valid image size and dont + // care about the image itself .. + } + else + { + LOGGER.debug("There is no image-context, so we have to rely on the image's natural bounds. " + "This may go awfully wrong."); + imageAreaWidthVal = image.getWidth(); + imageAreaHeightVal = image.getHeight(); + } + + final AttributeList frameList = new AttributeList(); + frameList.setAttribute(OfficeNamespaces.DRAWING_NS, "name", imageNames.generateName("Image")); + if (styleName != null) + { + frameList.setAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME, styleName); + } + frameList.setAttribute(OfficeNamespaces.TEXT_NS, "anchor-type", OfficeToken.PARAGRAPH); + frameList.setAttribute(OfficeNamespaces.SVG_NS, "z-index", "0"); + frameList.setAttribute(OfficeNamespaces.SVG_NS, "x", posX.getValue() + posX.getType().getType()); + frameList.setAttribute(OfficeNamespaces.SVG_NS, "y", posY.getValue() + posY.getType().getType()); + + + LOGGER.debug("Image " + imageData + " A-Width: " + imageAreaWidthVal + ", A-Height: " + imageAreaHeightVal); + + if (imageAreaWidthVal != null) + { + frameList.setAttribute(OfficeNamespaces.SVG_NS, + "width", imageAreaWidthVal.getValue() + imageAreaWidthVal.getType().getType()); + } + + if (imageAreaHeightVal != null) + { + frameList.setAttribute(OfficeNamespaces.SVG_NS, + "height", imageAreaHeightVal.getValue() + imageAreaHeightVal.getType().getType()); + } + + + final AttributeList imageList = new AttributeList(); + imageList.setAttribute(OfficeNamespaces.XLINK_NS, "href", image.getEmbeddableLink()); + imageList.setAttribute(OfficeNamespaces.XLINK_NS, "type", "simple"); + imageList.setAttribute(OfficeNamespaces.XLINK_NS, "show", "embed"); + imageList.setAttribute(OfficeNamespaces.XLINK_NS, "actuate", "onLoad"); + + + try + { + getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, "frame", frameList, XmlWriterSupport.OPEN); + getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.IMAGE, imageList, XmlWriterSupport.CLOSE); + getXmlWriter().writeCloseTag(); + } + catch (IOException ioe) + { + throw new ReportProcessingException(FAILED, ioe); + } + } + } + + private CSSNumericValue computeImageWidth(final ImageElementContext imageElementContext) + { + final LengthCalculator calculator = new LengthCalculator(); + final String[] strings = imageElementContext.getColStyles(); + for (int i = 0; i < strings.length; i++) + { + final String styleName = strings[i]; + final CSSNumericValue value = computeColumnWidth(styleName); + if (value != null) + { + calculator.add(value); + } + } + return calculator.getResult(); + } + + private CSSNumericValue computeImageHeight(final ImageElementContext imageElementContext) + { + final LengthCalculator calculator = new LengthCalculator(); + final String[] strings = imageElementContext.getRowStyles(); + for (int i = 0; i < strings.length; i++) + { + final String styleName = strings[i]; + final CSSNumericValue value = computeRowHeight(styleName); + if (value != null) + { + calculator.add(value); + } + } + return calculator.getResult(); + } + + protected CSSNumericValue computeRowHeight(final String rowStyle) + { + final OfficeStylesCollection contentStyles = getContentStylesCollection(); + final OfficeStyle style = contentStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); + if (style != null) + { + final Element element = style.getTableRowProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); + if (height != null) + { + return parseLength(height); + } + } + + final String styleParent = style.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + + final OfficeStylesCollection globalStyles = getGlobalStylesCollection(); + final OfficeStyle globalStyle = globalStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); + if (globalStyle != null) + { + final Element element = globalStyle.getTableRowProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); + if (height != null) + { + return parseLength(height); + } + } + final String styleParent = globalStyle.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + + final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); + final OfficeStyle predefStyle = predefStyles.getStyle(OfficeToken.TABLE_ROW, rowStyle); + if (predefStyle != null) + { + final Element element = predefStyle.getTableRowProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "row-height"); + if (height != null) + { + return parseLength(height); + } + } + final String styleParent = predefStyle.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + // not found. + return null; + } + + protected CSSNumericValue computeColumnWidth(final String colStyle) + { + final OfficeStylesCollection contentStyles = getContentStylesCollection(); + final OfficeStyle style = contentStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); + if (style != null) + { + final Element element = style.getTableColumnProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); + if (height != null) + { + return parseLength(height); + } + } + + final String styleParent = style.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + + final OfficeStylesCollection globalStyles = getGlobalStylesCollection(); + final OfficeStyle globalStyle = globalStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); + if (globalStyle != null) + { + final Element element = globalStyle.getTableColumnProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); + if (height != null) + { + return parseLength(height); + } + } + final String styleParent = globalStyle.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + + final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); + final OfficeStyle predefStyle = predefStyles.getStyle(OfficeToken.TABLE_COLUMN, colStyle); + if (predefStyle != null) + { + final Element element = predefStyle.getTableColumnProperties(); + if (element != null) + { + final String height = (String) element.getAttribute(OfficeNamespaces.STYLE_NS, "column-width"); + if (height != null) + { + return parseLength(height); + } + } + final String styleParent = predefStyle.getStyleParent(); + if (styleParent != null) + { + return computeRowHeight(styleParent); + } + } + // not found. + return null; + } + + protected Element produceFirstChild(final Section style, + final String nameSpace, + final String type) + { + Element paragraphProps = style.findFirstChild(nameSpace, type); + if (paragraphProps == null) + { + paragraphProps = new Section(); + paragraphProps.setNamespace(nameSpace); + paragraphProps.setType(type); + style.addNode(paragraphProps); + } + return paragraphProps; + } + + protected void startChartProcessing(final AttributeMap attrs) + throws ReportProcessingException + { + final String classId = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "class-id"); + final String chartUrl = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "href"); + final ArrayList masterColumns = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_COLUMNS); + final ArrayList masterValues = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.MASTER_VALUES); + final ArrayList detailColumns = (ArrayList) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, SDBCReportDataFactory.DETAIL_COLUMNS); + final String href = oleProducer.produceOle(chartUrl, masterColumns, masterValues, detailColumns); + + final AttributeList oleList = new AttributeList(); + oleList.setAttribute(OfficeNamespaces.DRAWING_NS, "class-id", classId); + oleList.setAttribute(OfficeNamespaces.XLINK_NS, "href", "./" + href); + oleList.setAttribute(OfficeNamespaces.XLINK_NS, "type", "simple"); + oleList.setAttribute(OfficeNamespaces.XLINK_NS, "show", "embed"); + oleList.setAttribute(OfficeNamespaces.XLINK_NS, "actuate", "onLoad"); + + try + { + getXmlWriter().writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.OBJECT_OLE, oleList, XmlWriterSupport.CLOSE); + } + catch (IOException ioe) + { + throw new ReportProcessingException(FAILED, ioe); + } + } + + static private double[] calcPaintSize(final CSSNumericValue areaWidth, final CSSNumericValue areaHeight, + final CSSNumericValue imageWidth, final CSSNumericValue imageHeight) + { + + final double ratioX = areaWidth.getValue() / imageWidth.getValue(); + final double ratioY = areaHeight.getValue() / imageHeight.getValue(); + final double ratioMin = Math.min(ratioX, ratioY); + + double[] ret = new double[2]; + ret[0] = imageWidth.getValue() * ratioMin; + ret[1] = imageHeight.getValue() * ratioMin; + return ret; + } + + protected void writeNullDate() throws IOException + { + // write NULL DATE + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "calculation-settings", null, XmlWriterSupport.OPEN); + final AttributeMap nullDateAttributes = new AttributeMap(); + nullDateAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "date-value", "1900-01-01"); + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "null-date", buildAttributeList(nullDateAttributes), XmlWriterSupport.CLOSE); + xmlWriter.writeCloseTag(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/OleProducer.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/OleProducer.java new file mode 100644 index 000000000000..2010a189be1d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/OleProducer.java @@ -0,0 +1,126 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.JobProperties; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.ReportExecutionException; +import org.libreoffice.report.ReportJobDefinition; +import org.libreoffice.report.pentaho.DefaultNameGenerator; +import org.libreoffice.report.pentaho.PentahoReportEngine; +import org.libreoffice.report.pentaho.PentahoReportEngineMetaData; + +import java.io.IOException; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class OleProducer +{ + + private static final Log LOGGER = LogFactory.getLog(OleProducer.class); + private final InputRepository inputRepository; + private final OutputRepository outputRepository; + private final DefaultNameGenerator nameGenerator; + private final DataSourceFactory dataSourceFactory; + private final ImageService imageService; + private final Integer maxRows; + + public OleProducer(final InputRepository inputRepository, + final OutputRepository outputRepository, final ImageService imageService, final DataSourceFactory dataSourceFactory, final Integer maxRows) + { + if (inputRepository == null) + { + throw new NullPointerException(); + } + if (outputRepository == null) + { + throw new NullPointerException(); + } + + this.inputRepository = inputRepository; + this.outputRepository = outputRepository; + this.nameGenerator = new DefaultNameGenerator(outputRepository); + this.dataSourceFactory = dataSourceFactory; + this.imageService = imageService; + this.maxRows = maxRows; + } + + String produceOle(final String source, final List masterColumns, final List masterValues, final List detailColumns) + { + InputRepository subInputRepository = null; + OutputRepository subOutputRepository = null; + String output = ""; + try + { + subInputRepository = inputRepository.openInputRepository(source); + output = nameGenerator.generateStorageName("Object", null); + subOutputRepository = outputRepository.openOutputRepository(output, PentahoReportEngineMetaData.OPENDOCUMENT_CHART); + try + { + + final PentahoReportEngine engine = new PentahoReportEngine(); + final ReportJobDefinition definition = engine.createJobDefinition(); + final JobProperties procParms = definition.getProcessingParameters(); + + procParms.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, subInputRepository); + procParms.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, subOutputRepository); + procParms.setProperty(ReportEngineParameterNames.INPUT_NAME, "content.xml"); + procParms.setProperty(ReportEngineParameterNames.OUTPUT_NAME, "content.xml"); + procParms.setProperty(ReportEngineParameterNames.CONTENT_TYPE, PentahoReportEngineMetaData.OPENDOCUMENT_CHART); + procParms.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataSourceFactory); + procParms.setProperty(ReportEngineParameterNames.INPUT_MASTER_COLUMNS, masterColumns); + procParms.setProperty(ReportEngineParameterNames.INPUT_MASTER_VALUES, masterValues); + procParms.setProperty(ReportEngineParameterNames.INPUT_DETAIL_COLUMNS, detailColumns); + procParms.setProperty(ReportEngineParameterNames.IMAGE_SERVICE, imageService); + procParms.setProperty(ReportEngineParameterNames.MAXROWS, maxRows); + + engine.createJob(definition).execute(); + } + catch (ReportExecutionException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } + catch (IOException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } + } + catch (IOException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } finally + { + if (subInputRepository != null) + { + subInputRepository.closeInputRepository(); + } + if (subOutputRepository != null) + { + subOutputRepository.closeOutputRepository(); + } + } + return output; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java new file mode 100644 index 000000000000..da568078afb5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/StyleUtilities.java @@ -0,0 +1,605 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.DataStyle; +import org.libreoffice.report.pentaho.model.FontFaceDeclsSection; +import org.libreoffice.report.pentaho.model.FontFaceElement; +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.report.ReportProcessingException; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.util.AttributeNameGenerator; + + +/** + * Todo: Document me! + * + * @since 13.03.2007 + */ +public class StyleUtilities +{ + + private static final Log LOGGER = LogFactory.getLog(StyleUtilities.class); + private static final String STYLE = "style"; + + private StyleUtilities() + { + } + + /** + * Copies the specififed style (keyed by its family and name) into the current styles collection. This copies the + * style and all inherited styles into the target collection. Inherited common styles will be always be added to the + * common collection (which will be written into the 'styles.xml' later). + *

+ * This method does nothing if the specified style already exists in the styles collection. + * + * @param styleFamily the family of the style to copy + * @param styleName the unique name of the style. + * @param stylesCollection the current styles collection + * @param commonCollection the global styles collection + * @param predefCollection the predefined styles from where to copy the styles. + * @throws ReportProcessingException if the style copying failed. + */ + public static void copyStyle(final String styleFamily, + final String styleName, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection) + throws ReportProcessingException + { + copyStyle(styleFamily, styleName, stylesCollection, + commonCollection, predefCollection, new HashSet()); + } + + /** + * Copies the specififed style (keyed by its family and name) into the current styles collection. This copies the + * style and all inherited styles into the target collection. Inherited common styles will be always be added to the + * common collection (which will be written into the 'styles.xml' later). + *

+ * This method does nothing if the specified style already exists in the styles collection. + * + * @param styleFamily the family of the style to copy + * @param styleName the unique name of the style. + * @param stylesCollection the current styles collection + * @param commonCollection the global styles collection + * @param predefCollection the predefined styles from where to copy the styles. + * @param inheritanceTracker a collection of all styles that have been touched. This is used to prevent infinite + * loops and duplicates. + * @throws ReportProcessingException if the style copying failed. + */ + private static void copyStyle(final String styleFamily, + final String styleName, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection, + final Set inheritanceTracker) + throws ReportProcessingException + { + if (inheritanceTracker.contains(styleName)) + { + return; + } + inheritanceTracker.add(styleName); + + if (stylesCollection.containsStyle(styleFamily, styleName) || commonCollection.getCommonStyles().containsStyle(styleFamily, styleName)) + { + // fine, there's already a copy of the stylesheet. + return; + } + + final OfficeStyle predefCommonStyle = + predefCollection.getCommonStyles().getStyle(styleFamily, styleName); + if (predefCommonStyle != null) + { + // so we have an style from the predefined collection. + // copy it an add it to the current stylescollection + final OfficeStyles commonStyles = commonCollection.getCommonStyles(); + + copyStyleInternal(predefCommonStyle, commonStyles, stylesCollection, + commonCollection, predefCollection, styleFamily, inheritanceTracker); + return; + } + + final OfficeStyle predefAutoStyle = + predefCollection.getAutomaticStyles().getStyle(styleFamily, styleName); + if (predefAutoStyle != null) + { + // so we have an style from the predefined collection. + // copy it an add it to the current stylescollection + final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); + copyStyleInternal(predefAutoStyle, autoStyles, stylesCollection, + commonCollection, predefCollection, styleFamily, inheritanceTracker); + return; + } + + // There is no automatic style either. Now this means that someone + // messed up the fileformat. Lets create a new empty style for this. + final OfficeStyle autostyle = new OfficeStyle(); + autostyle.setNamespace(OfficeNamespaces.STYLE_NS); + autostyle.setType(STYLE); + autostyle.setStyleFamily(styleFamily); + autostyle.setStyleName(styleName); + + final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); + autoStyles.addStyle(autostyle); + } + + private static OfficeStyle copyStyleInternal( + final OfficeStyle predefCommonStyle, + final OfficeStyles styles, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection, + final String styleFamily, + final Set inheritanceTracker) + throws ReportProcessingException + { + try + { + final OfficeStyle preStyle = (OfficeStyle) predefCommonStyle.clone(); + styles.addStyle(preStyle); + performFontFaceProcessing(preStyle, stylesCollection, predefCollection); + performDataStyleProcessing(preStyle, stylesCollection, predefCollection); + + // Lookup the parent style .. + final String styleParent = preStyle.getStyleParent(); + final OfficeStyle inherited = + stylesCollection.getStyle(styleFamily, styleParent); + if (inherited != null) + { + // OK, recurse (and hope that we dont run into an infinite loop) .. + copyStyle(styleFamily, styleParent, stylesCollection, + commonCollection, predefCollection, inheritanceTracker); + } + else if (styleParent != null) + { + LOGGER.warn("Inconsistent styles: " + styleFamily + ":" + styleParent + " does not exist."); + } + return preStyle; + } + catch (CloneNotSupportedException e) + { + throw new ReportProcessingException("Failed to derive a stylesheet", e); + } + } + + private static void performFontFaceProcessing(final OfficeStyle style, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection predefCollection) + throws ReportProcessingException + { + final Element textProperties = style.getTextProperties(); + if (textProperties == null) + { + return; + } + + try + { + final FontFaceDeclsSection currentFonts = stylesCollection.getFontFaceDecls(); + final FontFaceDeclsSection predefFonts = predefCollection.getFontFaceDecls(); + + final String fontName = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, "font-name"); + if (fontName != null && !currentFonts.containsFont(fontName)) + { + final FontFaceElement element = predefFonts.getFontFace(fontName); + if (element != null) + { + currentFonts.addFontFace((FontFaceElement) element.clone()); + } + } + + final String fontNameAsian = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, + "font-name-asian"); + if (fontNameAsian != null && !currentFonts.containsFont(fontNameAsian)) + { + final FontFaceElement element = predefFonts.getFontFace( + fontNameAsian); + if (element != null) + { + currentFonts.addFontFace((FontFaceElement) element.clone()); + } + } + + final String fontNameComplex = (String) textProperties.getAttribute(OfficeNamespaces.STYLE_NS, + "font-name-complex"); + if (fontNameComplex != null && !currentFonts.containsFont(fontNameComplex)) + { + final FontFaceElement element = predefFonts.getFontFace( + fontNameComplex); + if (element != null) + { + currentFonts.addFontFace((FontFaceElement) element.clone()); + } + } + } + catch (CloneNotSupportedException e) + { + throw new ReportProcessingException("Failed to clone font-face element"); + } + } + + private static void performDataStyleProcessing(final OfficeStyle style, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection predefCollection) + throws ReportProcessingException + { + final Section derivedStyle = performDataStyleProcessing(style, stylesCollection, predefCollection, "data-style-name"); + if (derivedStyle != null) + { + try + { + final Section styleMap = (Section) derivedStyle.findFirstChild(OfficeNamespaces.STYLE_NS, "map"); + if (styleMap != null) + { + performDataStyleProcessing(styleMap, stylesCollection, predefCollection, "apply-style-name"); + } + } + catch (Exception e) + { + } + } + } + + private static Section performDataStyleProcessing(final Section style, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection predefCollection, + final String attributeName) + throws ReportProcessingException + { + final Object attribute = style.getAttribute(OfficeNamespaces.STYLE_NS, attributeName); + final DataStyle derivedStyle; + if (attribute != null) + { + final String styleName = String.valueOf(attribute); + if (!stylesCollection.getAutomaticStyles().containsDataStyle(styleName) && !stylesCollection.getCommonStyles().containsDataStyle(styleName)) + { + try + { + final OfficeStyles automaticStyles = predefCollection.getAutomaticStyles(); + final DataStyle autoDataStyle = automaticStyles.getDataStyle(styleName); + if (autoDataStyle != null) + { + derivedStyle = (DataStyle) autoDataStyle.clone(); + stylesCollection.getAutomaticStyles().addDataStyle(derivedStyle); + } + else + { + final OfficeStyles commonStyles = predefCollection.getCommonStyles(); + final DataStyle commonDataStyle = commonStyles.getDataStyle(styleName); + if (commonDataStyle != null) + { + derivedStyle = (DataStyle) commonDataStyle.clone(); + stylesCollection.getCommonStyles().addDataStyle(derivedStyle); + } + else + { + LOGGER.warn("Dangling data style: " + styleName); + derivedStyle = null; + } + } + } + catch (CloneNotSupportedException e) + { + throw new ReportProcessingException("Failed to copy style. This should not have happened."); + } + } + else + { + derivedStyle = null; + } + } + else + { + derivedStyle = null; + } + return derivedStyle; + } + + /** + * Derives the named style. If the style is a common style, a new automatic style is generated and inserted into the + * given stylesCollection. If the named style is an automatic style, the style is copied and inserted as new automatic + * style. + *

+ * After the style has been created, the style's inheritance hierarchy will be copied as well. + *

+ * If there is no style with the given name and family, a new empty automatic style will be created. + * + * @param styleFamily the family of the style to copy + * @param styleName the unique name of the style. + * @param stylesCollection the current styles collection + * @param commonCollection the global styles collection + * @param predefCollection the predefined styles from where to copy the styles. + * @param generator the style-name-generator of the current report-target + * @return the derived style instance. + * @throws ReportProcessingException if the style copying failed. + */ + public static OfficeStyle deriveStyle(final String styleFamily, + final String styleName, + final OfficeStylesCollection stylesCollection, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection, + final AttributeNameGenerator generator) + throws ReportProcessingException + { + if (styleFamily == null) + { + throw new NullPointerException("StyleFamily must not be null"); + } + if (styleName != null) + { + + final OfficeStyle currentAuto = + stylesCollection.getAutomaticStyles().getStyle(styleFamily, + styleName); + if (currentAuto != null) + { + // handle an automatic style .. + final OfficeStyle derivedStyle = + deriveAutomaticStyle(currentAuto, styleFamily, styleName, + generator, commonCollection, predefCollection); + stylesCollection.getAutomaticStyles().addStyle(derivedStyle); + return derivedStyle; + } + + final OfficeStyle currentCommon = + stylesCollection.getCommonStyles().getStyle(styleFamily, styleName); + if (currentCommon != null) + { + // handle an common style .. + final OfficeStyle derivedStyle = + deriveCommonStyle(currentCommon, styleFamily, styleName, + generator, commonCollection, predefCollection); + stylesCollection.getAutomaticStyles().addStyle(derivedStyle); + return derivedStyle; + } + +// final OfficeStyle commonAuto = +// commonCollection.getAutomaticStyles().getStyle(styleFamily, +// styleName); +// if (commonAuto != null) +// { +// // handle an automatic style .. +// final OfficeStyle derivedStyle = +// deriveAutomaticStyle(commonAuto, styleFamily, styleName, +// generator, commonCollection, predefCollection); +// stylesCollection.getAutomaticStyles().addStyle(derivedStyle); +// return derivedStyle; +// } + + final OfficeStyle commonCommon = + commonCollection.getCommonStyles().getStyle(styleFamily, styleName); + if (commonCommon != null) + { + // handle an common style .. + final OfficeStyle derivedStyle = + deriveCommonStyle(commonCommon, styleFamily, styleName, + generator, commonCollection, predefCollection); + stylesCollection.getAutomaticStyles().addStyle(derivedStyle); + return derivedStyle; + } + + final OfficeStyle predefAuto = + predefCollection.getAutomaticStyles().getStyle(styleFamily, + styleName); + if (predefAuto != null) + { + // handle an automatic style .. + final OfficeStyle derivedStyle = + deriveAutomaticStyle(predefAuto, styleFamily, styleName, + generator, commonCollection, predefCollection); + stylesCollection.getAutomaticStyles().addStyle(derivedStyle); + return derivedStyle; + } + + final OfficeStyle predefCommon = + predefCollection.getCommonStyles().getStyle(styleFamily, styleName); + if (predefCommon != null) + { + // handle an common style .. + final OfficeStyle derivedStyle = + deriveCommonStyle(predefCommon, styleFamily, styleName, + generator, commonCollection, predefCollection); + stylesCollection.getAutomaticStyles().addStyle(derivedStyle); + return derivedStyle; + } + } + + // No such style. Create a new one .. + final OfficeStyle autostyle = new OfficeStyle(); + autostyle.setNamespace(OfficeNamespaces.STYLE_NS); + autostyle.setType(STYLE); + autostyle.setStyleFamily(styleFamily); + if (styleName != null) + { + autostyle.setStyleName(styleName); + } + else + { + autostyle.setStyleName(generator.generateName("derived_anonymous")); + } + + final OfficeStyles autoStyles = stylesCollection.getAutomaticStyles(); + autoStyles.addStyle(autostyle); + return autostyle; + } + + private static OfficeStyle deriveCommonStyle(final OfficeStyle commonStyle, + final String styleFamily, + final String styleName, + final AttributeNameGenerator nameGenerator, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection) + throws ReportProcessingException + { + final OfficeStyle autostyle = new OfficeStyle(); + autostyle.setNamespace(OfficeNamespaces.STYLE_NS); + autostyle.setType(STYLE); + autostyle.setStyleFamily(styleFamily); + autostyle.setStyleName(nameGenerator.generateName("derived_" + styleName)); + autostyle.setStyleParent(styleName); + + // now copy the common style .. + final OfficeStyles commonStyles = commonCollection.getCommonStyles(); + if (!commonStyles.containsStyle(styleFamily, styleName)) + { + copyStyleInternal(commonStyle, commonStyles, + commonCollection, commonCollection, predefCollection, + styleFamily, new HashSet()); + } + return autostyle; + } + + private static OfficeStyle deriveAutomaticStyle(final OfficeStyle commonStyle, + final String styleFamily, + final String styleName, + final AttributeNameGenerator nameGenerator, + final OfficeStylesCollection commonCollection, + final OfficeStylesCollection predefCollection) + throws ReportProcessingException + { + try + { + final OfficeStyle autostyle = (OfficeStyle) commonStyle.clone(); + autostyle.setNamespace(OfficeNamespaces.STYLE_NS); + autostyle.setType(STYLE); + autostyle.setStyleFamily(styleFamily); + autostyle.setStyleName(nameGenerator.generateName("derived_auto_" + styleName)); + + + final String parent = autostyle.getStyleParent(); + if (parent != null) + { + copyStyle(styleFamily, parent, commonCollection, commonCollection, + predefCollection); + } + return autostyle; + } + catch (CloneNotSupportedException e) + { + throw new ReportProcessingException( + "Deriving the style failed. Clone error: ", e); + } + } + + public static String queryStyle(final OfficeStylesCollection predefCollection, + final String styleFamily, + final String styleName, + final String sectionName, + final String propertyNamespace, + final String propertyName) + { + return queryStyle(predefCollection, styleFamily, + styleName, sectionName, propertyNamespace, propertyName, new HashSet()); + } + + public static OfficeStyle queryStyleByProperties(final OfficeStylesCollection predefCollection, + final String styleFamily, + final String sectionName, + final ArrayList propertyNamespace, + final ArrayList propertyName, + final ArrayList propertyValues) + { + if (propertyNamespace.size() != propertyName.size()) + { + return null; + } + final OfficeStyle[] styles = predefCollection.getAutomaticStyles().getAllStyles(); + for (int i = 0; i < styles.length; i++) + { + final OfficeStyle officeStyle = styles[i]; + if (officeStyle.getStyleFamily().equals(styleFamily)) + { + final Element section = officeStyle.findFirstChild(OfficeNamespaces.STYLE_NS, sectionName); + if (section != null) + { + int j = 0; + for (; j < propertyNamespace.size(); j++) + { + final String ns = (String) propertyNamespace.get(j); + final String prop = (String) propertyName.get(j); + final Object obj = section.getAttribute(ns, prop); + final Object value = propertyValues.get(j); + if (obj == null || value == null) + { + continue; + } + if (!propertyValues.get(j).equals(obj)) + { + break; + } + } + if (j == propertyName.size()) + { + return officeStyle; + } + } + } + } + return null; + } + + private static String queryStyle(final OfficeStylesCollection predefCollection, + final String styleFamily, + final String styleName, + final String sectionName, + final String propertyNamespace, + final String propertyName, + final Set seenStyles) + { + if (seenStyles.contains(styleName)) + { + return null; + } + seenStyles.add(styleName); + + final OfficeStyle style = predefCollection.getStyle(styleFamily, styleName); + if (style == null) + { + return null; // no such style + + } + final Element section = style.findFirstChild(OfficeNamespaces.STYLE_NS, sectionName); + if (section != null) + { + final Object attribute = section.getAttribute(propertyNamespace, propertyName); + if (attribute != null) + { + return String.valueOf(attribute); + } + } + final String parent = style.getStyleParent(); + if (parent == null) + { + return null; + } + return queryStyle(predefCollection, styleFamily, parent, sectionName, propertyNamespace, propertyName, seenStyles); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/StylesWriter.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/StylesWriter.java new file mode 100644 index 000000000000..64257d50d160 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/StylesWriter.java @@ -0,0 +1,380 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.DataStyle; +import org.libreoffice.report.pentaho.model.FontFaceDeclsSection; +import org.libreoffice.report.pentaho.model.FontFaceElement; +import org.libreoffice.report.pentaho.model.OfficeMasterPage; +import org.libreoffice.report.pentaho.model.OfficeMasterStyles; +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.model.PageLayout; +import org.libreoffice.report.pentaho.model.RawText; + +import java.io.IOException; +import java.io.Writer; + +import java.util.Iterator; +import java.util.Map; +import java.util.TreeMap; + +import org.jfree.layouting.namespace.Namespaces; +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.JFreeReportBoot; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Node; +import org.jfree.report.structure.Section; +import org.jfree.report.structure.StaticText; + +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + + +/** + * This class writes the style collection into a 'styles.xml' document. + * + * @since 09.03.2007 + */ +public class StylesWriter +{ + + private final XmlWriter xmlWriter; + private final boolean writeOpeningTag; + + public StylesWriter(final Writer writer) + { + final DefaultTagDescription tagDescription = new DefaultTagDescription(); + tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), + OfficeDocumentReportTarget.TAG_DEF_PREFIX); + + this.xmlWriter = new XmlWriter(writer, tagDescription); + this.xmlWriter.setAlwaysAddNamespace(true); + this.writeOpeningTag = true; + } + + public StylesWriter(final XmlWriter xmlWriter) + { + this.xmlWriter = xmlWriter; + this.writeOpeningTag = false; + } + + public void writeContentStyles(final OfficeStylesCollection predefined, + final OfficeStylesCollection globals) + throws IOException, ReportProcessingException + { + writeFontFaces(new OfficeStylesCollection[] + { + globals + }); + writeAutomaticStylesSection(new OfficeStylesCollection[] + { + globals + }); + } + + public void writeGlobalStyles(final OfficeStylesCollection predefined, + final OfficeStylesCollection globals) + throws IOException, ReportProcessingException + { + if (writeOpeningTag) + { + performWriteRootTag(); + } + + writeFontFaces(new OfficeStylesCollection[] + { + globals + }); + writeCommonStylesSection(new OfficeStylesCollection[] + { + globals + }); + writeAutomaticStylesSection(new OfficeStylesCollection[] + { + globals + }); + writeMasterStylesSection(new OfficeStylesCollection[] + { + globals + }); + + if (writeOpeningTag) + { + xmlWriter.writeCloseTag(); + } + } + + private void writeMasterStylesSection(final OfficeStylesCollection[] osc) + throws IOException + { + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "master-styles", XmlWriterSupport.OPEN); + for (int sci = 0; sci < osc.length; sci++) + { + final OfficeStylesCollection collection = osc[sci]; + final OfficeMasterStyles officeStyles = collection.getMasterStyles(); + final OfficeMasterPage[] officeMasterPages = officeStyles.getAllMasterPages(); + for (int i = 0; i < officeMasterPages.length; i++) + { + final OfficeMasterPage masterPage = officeMasterPages[i]; + writeSection(masterPage); + } + + writeSectionChildren(officeStyles.getOtherNodes().getNodeArray()); + } + + xmlWriter.writeCloseTag(); + } + + private void writeCommonStylesSection(final OfficeStylesCollection[] osc) + throws IOException + { + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "styles", XmlWriterSupport.OPEN); + + for (int sci = 0; sci < osc.length; sci++) + { + final OfficeStylesCollection collection = osc[sci]; + final OfficeStyles officeStyles = collection.getCommonStyles(); + writeStyles(officeStyles); + } + + xmlWriter.writeCloseTag(); + } + + private void writeAutomaticStylesSection(final OfficeStylesCollection[] osc) + throws IOException + { + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "automatic-styles", XmlWriterSupport.OPEN); + for (int sci = 0; sci < osc.length; sci++) + { + final OfficeStylesCollection collection = osc[sci]; + final OfficeStyles officeStyles = collection.getAutomaticStyles(); + writeStyles(officeStyles); + } + + xmlWriter.writeCloseTag(); + } + + private void writeFontFaces(final OfficeStylesCollection[] osc) + throws IOException + { + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "font-face-decls", XmlWriterSupport.OPEN); + + final TreeMap fontFaces = new TreeMap(); + for (int sci = 0; sci < osc.length; sci++) + { + final OfficeStylesCollection collection = osc[sci]; + final FontFaceDeclsSection fontFaceDecls = collection.getFontFaceDecls(); + final FontFaceElement[] fontFaceElements = fontFaceDecls.getAllFontFaces(); + for (int i = 0; i < fontFaceElements.length; i++) + { + final FontFaceElement element = fontFaceElements[i]; + fontFaces.put(element.getStyleName(), element); + } + } + + final Iterator values = fontFaces.values().iterator(); + while (values.hasNext()) + { + final FontFaceElement element = values.next(); + writeElement(element); + } + + xmlWriter.writeCloseTag(); + } + + private void writeStyles(final OfficeStyles styles) + throws IOException + { + final OfficeStyle[] allStyles = styles.getAllStyles(); + for (int i = 0; i < allStyles.length; i++) + { + final OfficeStyle style = allStyles[i]; + writeSection(style); + } + + final DataStyle[] allDataStyles = styles.getAllDataStyles(); + for (int i = 0; i < allDataStyles.length; i++) + { + final DataStyle style = allDataStyles[i]; + writeSection(style); + } + + final PageLayout[] allPageStyles = styles.getAllPageStyles(); + for (int i = 0; i < allPageStyles.length; i++) + { + final PageLayout style = allPageStyles[i]; + writeSection(style); + } + + writeSectionChildren(styles.getOtherStyles()); + } + + private void writeElement(final Element element) + throws IOException + { + final String type = element.getType(); + final String namespace = element.getNamespace(); + final AttributeList attrList = buildAttributeList(element.getAttributeMap()); + xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.CLOSE); + } + + private void writeSection(final Section section) + throws IOException + { + final String type = section.getType(); + final String namespace = section.getNamespace(); + final AttributeList attrList = buildAttributeList(section.getAttributeMap()); + if (section.getNodeCount() == 0) + { + xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.CLOSE); + return; + } + + xmlWriter.writeTag(namespace, type, attrList, XmlWriterSupport.OPEN); + writeSectionChildren(section.getNodeArray()); + + xmlWriter.writeCloseTag(); + } + + private void writeSectionChildren(final Node[] nodes) + throws IOException + { + for (int i = 0; i < nodes.length; i++) + { + final Node node = nodes[i]; + if (node instanceof Section) + { + writeSection((Section) node); + } + else if (node instanceof Element) + { + writeElement((Element) node); + } + else if (node instanceof RawText) + { + final RawText text = (RawText) node; + xmlWriter.writeText(text.getText()); + } + else if (node instanceof StaticText) + { + final StaticText text = (StaticText) node; + xmlWriter.writeTextNormalized(text.getText(), false); + } + } + } + + protected AttributeList buildAttributeList(final AttributeMap attrs) + { + final AttributeList attrList = new AttributeList(); + final String[] namespaces = attrs.getNameSpaces(); + for (int i = 0; i < namespaces.length; i++) + { + final String attrNamespace = namespaces[i]; + if (isFilteredNamespace(attrNamespace)) + { + continue; + } + + final Map localAttributes = attrs.getAttributes(attrNamespace); + final Iterator entries = localAttributes.entrySet().iterator(); + while (entries.hasNext()) + { + final Map.Entry entry = (Map.Entry) entries.next(); + final String key = String.valueOf(entry.getKey()); + attrList.setAttribute(attrNamespace, key, String.valueOf(entry.getValue())); + } + } + return attrList; + } + + protected boolean isFilteredNamespace(final String namespace) + { + if (Namespaces.LIBLAYOUT_NAMESPACE.equals(namespace)) + { + return true; + } + if (JFreeReportInfo.REPORT_NAMESPACE.equals(namespace)) + { + return true; + } + if (JFreeReportInfo.COMPATIBILITY_NAMESPACE.equals(namespace)) + { + return true; + } + if (OfficeNamespaces.OOREPORT_NS.equals(namespace)) + { + return true; + } + return false; + } + + private void performWriteRootTag() + throws IOException + { + final AttributeList rootAttributes = new AttributeList(); + rootAttributes.addNamespaceDeclaration("office", + OfficeNamespaces.OFFICE_NS); + rootAttributes.addNamespaceDeclaration("style", OfficeNamespaces.STYLE_NS); + rootAttributes.addNamespaceDeclaration("text", OfficeNamespaces.TEXT_NS); + rootAttributes.addNamespaceDeclaration("table", OfficeNamespaces.TABLE_NS); + rootAttributes.addNamespaceDeclaration("draw", OfficeNamespaces.DRAWING_NS); + rootAttributes.addNamespaceDeclaration("fo", OfficeNamespaces.FO_NS); + rootAttributes.addNamespaceDeclaration("xlink", OfficeNamespaces.XLINK_NS); + rootAttributes.addNamespaceDeclaration("dc", OfficeNamespaces.PURL_NS); + rootAttributes.addNamespaceDeclaration("meta", OfficeNamespaces.META_NS); + rootAttributes.addNamespaceDeclaration("number", + OfficeNamespaces.DATASTYLE_NS); + rootAttributes.addNamespaceDeclaration("svg", OfficeNamespaces.SVG_NS); + rootAttributes.addNamespaceDeclaration("chart", OfficeNamespaces.CHART_NS); + rootAttributes.addNamespaceDeclaration("chartooo", OfficeNamespaces.CHARTOOO_NS); + rootAttributes.addNamespaceDeclaration("dr3d", OfficeNamespaces.DR3D_NS); + rootAttributes.addNamespaceDeclaration("math", OfficeNamespaces.MATHML_NS); + rootAttributes.addNamespaceDeclaration("form", OfficeNamespaces.FORM_NS); + rootAttributes.addNamespaceDeclaration("script", + OfficeNamespaces.SCRIPT_NS); + rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); + rootAttributes.addNamespaceDeclaration("ooow", OfficeNamespaces.OOW2004_NS); + rootAttributes.addNamespaceDeclaration("oooc", OfficeNamespaces.OOC2004_NS); + rootAttributes.addNamespaceDeclaration("dom", + OfficeNamespaces.XML_EVENT_NS); + rootAttributes.addNamespaceDeclaration("xforms", + OfficeNamespaces.XFORMS_NS); + rootAttributes.addNamespaceDeclaration("xsd", OfficeNamespaces.XSD_NS); + rootAttributes.addNamespaceDeclaration("xsi", OfficeNamespaces.XSI_NS); + rootAttributes.addNamespaceDeclaration("grddl", OfficeNamespaces.GRDDL_NS); + rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", + OfficeDocumentReportTarget.ODF_VERSION); + + this.xmlWriter.writeXmlDeclaration("UTF-8"); + this.xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, + "document-styles", rootAttributes, XmlWriterSupport.OPEN); + } + + public void close() + throws IOException + { + xmlWriter.close(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportProcessor.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportProcessor.java new file mode 100644 index 000000000000..f8256bc6ff57 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportProcessor.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.chart; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OutputRepository; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.SinglePassReportProcessor; + +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + +/** + * + */ +public class ChartRawReportProcessor extends SinglePassReportProcessor +{ + + private final OutputRepository outputRepository; + private final String targetName; + private final InputRepository inputRepository; + private final ImageService imageService; + private final DataSourceFactory dataSourceFactory; + + public ChartRawReportProcessor(final InputRepository inputRepository, + final OutputRepository outputRepository, + final String targetName, + final ImageService imageService, + final DataSourceFactory dataSourceFactory) + { + if (inputRepository == null) + { + throw new NullPointerException(); + } + if (outputRepository == null) + { + throw new NullPointerException(); + } + if (targetName == null) + { + throw new NullPointerException(); + } + if (imageService == null) + { + throw new NullPointerException(); + } + if (dataSourceFactory == null) + { + throw new NullPointerException(); + } + this.targetName = targetName; + this.inputRepository = inputRepository; + this.outputRepository = outputRepository; + this.imageService = imageService; + this.dataSourceFactory = dataSourceFactory; + } + + protected ReportTarget createReportTarget(final ReportJob job) + throws ReportProcessingException + { + final ReportStructureRoot report = job.getReportStructureRoot(); + final ResourceManager resourceManager = report.getResourceManager(); + + return new ChartRawReportTarget(job, resourceManager, report.getBaseResource(), + inputRepository, outputRepository, targetName, imageService, dataSourceFactory); + } + + public void processReport(final ReportJob job) throws ReportDataFactoryException, DataSourceException, + ReportProcessingException + { + final ReportTarget reportTarget = createReportTarget(job); + processReportRun(job, reportTarget); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportTarget.java new file mode 100644 index 000000000000..7b0a2819a22b --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/chart/ChartRawReportTarget.java @@ -0,0 +1,247 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.chart; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.PentahoReportEngineMetaData; +import org.libreoffice.report.pentaho.output.OfficeDocumentReportTarget; + +import java.io.IOException; +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTargetUtil; + +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + +public class ChartRawReportTarget extends OfficeDocumentReportTarget +{ + + private boolean inFilterElements = false; + private boolean tableRowsStarted = false; + private int tableCount = 0; + private int closeTags = 0; + + public ChartRawReportTarget(final ReportJob reportJob, + final ResourceManager resourceManager, + final ResourceKey baseResource, + final InputRepository inputRepository, + final OutputRepository outputRepository, + final String target, + final ImageService imageService, + final DataSourceFactory dataSourceFactory) + throws ReportProcessingException + { + super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, dataSourceFactory); + } + + protected String getTargetMimeType() + { + return "application/vnd.oasis.opendocument.chart"; + } + + protected String getStartContent() + { + return "chart"; + } + + public String getExportDescriptor() + { + return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_CHART; + } + + protected void startContent(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException + { + inFilterElements = false; + closeTags = 0; + tableCount = 0; + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, getStartContent(), null, XmlWriterSupport.OPEN); + writeNullDate(); + ++closeTags; + } + + protected void endContent(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException + { + final XmlWriter xmlWriter = getXmlWriter(); + while (closeTags > 0) + { + xmlWriter.writeCloseTag(); + --closeTags; + } + } + + protected void startReportSection(final AttributeMap attrs, final int role) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected void endReportSection(final AttributeMap attrs, final int role) + throws IOException, DataSourceException, ReportProcessingException + { + } + + protected void startOther(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException + { + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + if (!isFilteredNamespace(namespace)) + { + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + try + { + processElement(attrs, namespace, elementType); + } + catch (IOException e) + { + throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); + } + } + } + + private boolean isFiltered(final String elementType) + { + return OfficeToken.TABLE_HEADER_COLUMNS.equals(elementType) || OfficeToken.TABLE_HEADER_ROWS.equals(elementType) || OfficeToken.TABLE_COLUMNS.equals(elementType); + } + + protected void endOther(final AttributeMap attrs) throws IOException, DataSourceException, ReportProcessingException + { + if (tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE) + { + return; + } + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + if (!isFilteredNamespace(namespace)) + { + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + // if this is the report namespace, write out a table definition .. + if (OfficeNamespaces.TABLE_NS.equals(namespace)) + { + if (OfficeToken.TABLE.equals(elementType) || OfficeToken.TABLE_ROWS.equals(elementType)) + { + return; + } + else if (isFiltered(elementType)) + { + inFilterElements = false; + if (tableCount > 1) + { + return; + } + } + } + else if (OfficeNamespaces.CHART_NS.equals(namespace) && "chart".equals(elementType)) + { + return; + } + if (inFilterElements && tableCount > 1) + { + return; + } + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeCloseTag(); + --closeTags; + } + } + + public void processContent(final DataFlags value) + throws DataSourceException, ReportProcessingException + { + if (!(tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE)) + { + super.processContent(value); + } + } + + private void processElement(final AttributeMap attrs, final String namespace, final String elementType) + throws IOException, ReportProcessingException + { + if (tableRowsStarted && getCurrentRole() == ROLE_TEMPLATE) + { + return; + } + if (OfficeNamespaces.TABLE_NS.equals(namespace)) + { + if (OfficeToken.TABLE.equals(elementType)) + { + tableCount += 1; + if (tableCount > 1) + { + return; + } + } + else if (OfficeToken.TABLE_ROWS.equals(elementType)) + { + if (tableCount > 1) + { + return; + } + tableRowsStarted = true; + } + else if (isFiltered(elementType)) + { + inFilterElements = true; + if (tableCount > 1) + { + return; + } + } + } + if (inFilterElements && tableCount > 1) + { + return; + } + + // All styles have to be processed or you will loose the paragraph-styles and inline text-styles. + // .. + performStyleProcessing(attrs); + + final AttributeList attrList = buildAttributeList(attrs); + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(namespace, elementType, attrList, XmlWriter.OPEN); + ++closeTags; + } + // ///////////////////////////////////////////////////////////////////////// + + public void processText(final String text) throws DataSourceException, ReportProcessingException + { + if (inFilterElements && tableCount > 1) + { + return; + } + super.processText(text); + } + + public void endReport(final ReportStructureRoot report) + throws DataSourceException, ReportProcessingException + { + super.endReport(report); + copyMeta(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java new file mode 100644 index 000000000000..e61194797c70 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java @@ -0,0 +1,109 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.spreadsheet; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.pentaho.PentahoFormulaContext; + +import org.jfree.report.DataSourceException; +import org.jfree.report.ReportDataFactoryException; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.data.ReportContextImpl; +import org.jfree.report.flow.AbstractReportProcessor; +import org.jfree.report.flow.ReportContext; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTarget; + +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + +public class SpreadsheetRawReportProcessor extends AbstractReportProcessor +{ + + private final OutputRepository outputRepository; + private final String targetName; + private final InputRepository inputRepository; + private final ImageService imageService; + private final DataSourceFactory dataSourceFactory; + + public SpreadsheetRawReportProcessor(final InputRepository inputRepository, + final OutputRepository outputRepository, + final String targetName, + final ImageService imageService, + final DataSourceFactory dataSourceFactory) + { + if (outputRepository == null) + { + throw new NullPointerException(); + } + if (targetName == null) + { + throw new NullPointerException(); + } + if (imageService == null) + { + throw new NullPointerException(); + } + if (inputRepository == null) + { + throw new NullPointerException(); + } + if (dataSourceFactory == null) + { + throw new NullPointerException(); + } + + this.targetName = targetName; + this.inputRepository = inputRepository; + this.outputRepository = outputRepository; + this.imageService = imageService; + this.dataSourceFactory = dataSourceFactory; + } + + protected ReportTarget createReportTarget(final ReportJob job) throws ReportProcessingException + { + final ReportStructureRoot report = job.getReportStructureRoot(); + final ResourceManager resourceManager = report.getResourceManager(); + return new SpreadsheetRawReportTarget(job, resourceManager, report.getBaseResource(), inputRepository, outputRepository, targetName, imageService, dataSourceFactory); + } + + public void processReport(final ReportJob job) throws ReportDataFactoryException, DataSourceException, + ReportProcessingException + { + final ReportTarget reportTarget = createReportTarget(job); + // first run: collect table cell sizes for all tables + processReportRun(job, reportTarget); + // second run: uses table cell data to output a single uniform table + processReportRun(job, reportTarget); + } + + protected ReportContext createReportContext(final ReportJob job, + final ReportTarget target) + { + final ReportContext context = super.createReportContext(job, target); + if (context instanceof ReportContextImpl) + { + final ReportContextImpl impl = (ReportContextImpl) context; + impl.setFormulaContext(new PentahoFormulaContext(impl.getFormulaContext(), job.getConfiguration())); + } + return context; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java new file mode 100644 index 000000000000..163818cf0aa4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java @@ -0,0 +1,959 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.spreadsheet; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.PentahoReportEngineMetaData; +import org.libreoffice.report.pentaho.model.OfficeMasterPage; +import org.libreoffice.report.pentaho.model.OfficeMasterStyles; +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.model.PageSection; +import org.libreoffice.report.pentaho.output.OfficeDocumentReportTarget; +import org.libreoffice.report.pentaho.output.StyleUtilities; +import org.libreoffice.report.pentaho.output.text.MasterPageFactory; +import org.libreoffice.report.pentaho.styles.LengthCalculator; + +import java.io.IOException; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.jfree.layouting.input.style.values.CSSNumericType; +import org.jfree.layouting.input.style.values.CSSNumericValue; +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataFlags; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTargetUtil; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.util.IntegerCache; + +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + + +/** + * Creation-Date: 03.11.2007 + * + */ +public class SpreadsheetRawReportTarget extends OfficeDocumentReportTarget +{ + + private static final String[] FOPROPS = new String[] + { + "letter-spacing", "font-variant", "text-transform" + }; + private static final String NUMBERCOLUMNSSPANNED = "number-columns-spanned"; + private static final String[] STYLEPROPS = new String[] + { + "text-combine", "font-pitch-complex", "text-rotation-angle", "font-name", "text-blinking", "letter-kerning", "text-combine-start-char", "text-combine-end-char", "text-position", "text-scale" + }; + private static final int CELL_WIDTH_FACTOR = 10000; + private static final String TRANSPARENT = "transparent"; + private boolean paragraphFound = false; + private boolean paragraphHandled = false; + + /** + * This class represents a column boundary, not in width, but it's actual boundary location. One of the motivations + * for creating this class was to be able to record the boundaries for each incoming table while consuming as few + * objects/memory as possible. + */ + private static class ColumnBoundary implements Comparable + { + + private final Set tableIndices; + private final long boundary; + + private ColumnBoundary(final long boundary) + { + this.tableIndices = new HashSet(); + this.boundary = boundary; + } + + public void addTableIndex(final int table) + { + tableIndices.add(IntegerCache.getInteger(table)); + } + + public float getBoundary() + { + return boundary; + } + + public boolean isContainedByTable(final int table) + { + final Integer index = IntegerCache.getInteger(table); + return tableIndices.contains(index); + } + + public int compareTo(final ColumnBoundary arg0) + { + if (arg0.equals(this)) + { + return 0; + } + if (arg0 instanceof ColumnBoundary) + { + if (boundary > arg0.boundary) + { + return 1; + } + else + { + return -1; + } + } + return 1; + } + + public boolean equals(final Object obj) + { + return obj instanceof ColumnBoundary && ((ColumnBoundary) obj).boundary == boundary; + } + + public int hashCode() + { + assert false : "hashCode not designed"; + return 42; // any arbitrary constant will do + } + } + private String tableBackgroundColor; // null means transparent ... + private static final ColumnBoundary[] EMPTY_COLBOUNDS = new ColumnBoundary[0]; + private boolean elementBoundaryCollectionPass; + private boolean oleHandled; + private final List columnBoundaryList; + private long currentRowBoundaryMarker; + private ColumnBoundary[] sortedBoundaryArray; + private ColumnBoundary[] boundariesForTableArray; + private int tableCounter; + private int columnCounter; + private int columnSpanCounter; + private int currentSpan = 0; + private String unitsOfMeasure; + final private List shapes; + final private List ole; + final private List rowHeights; + + public SpreadsheetRawReportTarget(final ReportJob reportJob, + final ResourceManager resourceManager, + final ResourceKey baseResource, + final InputRepository inputRepository, + final OutputRepository outputRepository, + final String target, + final ImageService imageService, + final DataSourceFactory dataSourceFactory) + throws ReportProcessingException + { + super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, dataSourceFactory); + columnBoundaryList = new ArrayList(); + elementBoundaryCollectionPass = true; + rowHeights = new ArrayList(); + shapes = new ArrayList(); + ole = new ArrayList(); + oleHandled = false; + } + + public void startOther(final AttributeMap attrs) throws DataSourceException, ReportProcessingException + { + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.OBJECT_OLE, attrs)) + { + if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) + { + ole.add(attrs); + } + oleHandled = true; + return; + } + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + if (isRepeatingSection() || isFilteredNamespace(namespace)) + { + return; + } + + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + if (OfficeNamespaces.TEXT_NS.equals(namespace) && OfficeToken.P.equals(elementType) && !paragraphHandled) + { + paragraphFound = true; + return; + } + + if (OfficeNamespaces.DRAWING_NS.equals(namespace) && OfficeToken.FRAME.equals(elementType)) + { + if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) + { + final LengthCalculator len = new LengthCalculator(); + for (int i = 0; i < rowHeights.size(); i++) + { + len.add(rowHeights.get(i)); + // val += (rowHeights.get(i)).getValue(); + } + + rowHeights.clear(); + final CSSNumericValue currentRowHeight = len.getResult(); + rowHeights.add(currentRowHeight); + attrs.setAttribute(OfficeNamespaces.DRAWING_NS, "z-index", String.valueOf(shapes.size())); + final String y = (String) attrs.getAttribute(OfficeNamespaces.SVG_NS, "y"); + if (y != null) + { + len.add(parseLength(y)); + final CSSNumericValue currentY = len.getResult(); + attrs.setAttribute(OfficeNamespaces.SVG_NS, "y", currentY.getValue() + currentY.getType().getType()); + } + shapes.add(attrs); + } + return; + } + if (oleHandled) + { + if (isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) + { + ole.add(attrs); + } + return; + } + + // if this is the report namespace, write out a table definition .. + if (OfficeNamespaces.TABLE_NS.equals(namespace) && OfficeToken.TABLE.equals(elementType)) + { + // whenever we see a new table, we increment our tableCounter + // this is used to keep tracked of the boundary conditions per table + tableCounter++; + } + + if (isElementBoundaryCollectionPass()) + { + collectBoundaryForElement(attrs); + } + else + // if (!isElementBoundaryCollectionPass()) + { + try + { + processElement(attrs, namespace, elementType); + } + catch (IOException e) + { + throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); + } + } + } + + protected void startReportSection(final AttributeMap attrs, final int role) throws IOException, DataSourceException, ReportProcessingException + { + if ((role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) && (!PageSection.isPrintWithReportHeader(attrs) || !PageSection.isPrintWithReportFooter(attrs))) + { + startBuffering(new OfficeStylesCollection(), true); + } + else + { + super.startReportSection(attrs, role); + } + } + + protected void endReportSection(final AttributeMap attrs, final int role) throws IOException, DataSourceException, ReportProcessingException + { + if ((role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) && (!PageSection.isPrintWithReportHeader(attrs) || !PageSection.isPrintWithReportFooter(attrs))) + { + finishBuffering(); + } + else + { + super.endReportSection(attrs, role); + } + } + + private void handleParagraph() + { + if (paragraphFound) + { + try + { + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, null, XmlWriterSupport.OPEN); + paragraphHandled = true; + paragraphFound = false; + } + catch (IOException ex) + { + LOGGER.error("ReportProcessing failed", ex); + } + } + } + + private void processElement(final AttributeMap attrs, final String namespace, final String elementType) + throws IOException, ReportProcessingException + { + final XmlWriter xmlWriter = getXmlWriter(); + + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE, attrs)) + { + // a new table means we must clear our "calculated" table boundary array cache + boundariesForTableArray = null; + + final String tableStyle = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + if (tableStyle == null) + { + tableBackgroundColor = null; + } + else + { + final Object raw = StyleUtilities.queryStyle(getPredefinedStylesCollection(), OfficeToken.TABLE, tableStyle, + "table-properties", OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); + if (raw == null || TRANSPARENT.equals(raw)) + { + tableBackgroundColor = null; + } + else + { + tableBackgroundColor = String.valueOf(raw); + } + } + return; + } + + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, attrs) || ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, attrs)) + { + return; + } + + // covered-table-cell elements may appear in the input from row or column spans. In the event that we hit a + // column-span we simply ignore these elements because we are going to adjust the span to fit the uniform table. + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.COVERED_TABLE_CELL, attrs)) + { + if (columnSpanCounter > 0) + { + columnSpanCounter--; + } + + if (columnSpanCounter == 0) + { + // if we weren't expecting a covered-table-cell, let's use it, it's probably from a row-span + columnCounter++; + final int span = getColumnSpanForCell(tableCounter, columnCounter, 1); + // use the calculated span for the column in the uniform table to create any additional covered-table-cell + // elements + for (int i = 0; i < span; i++) + { + xmlWriter.writeTag(namespace, OfficeToken.COVERED_TABLE_CELL, null, XmlWriter.CLOSE); + } + } + return; + } + + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrs)) + { + // a new row means our column counter gets reset + columnCounter = 0; + // Lets make sure the color of the table is ok .. + if (tableBackgroundColor != null) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + final OfficeStyle style = deriveStyle(OfficeToken.TABLE_ROW, styleName); + Element tableRowProperties = style.getTableRowProperties(); + if (tableRowProperties == null) + { + tableRowProperties = new Section(); + tableRowProperties.setNamespace(OfficeNamespaces.STYLE_NS); + tableRowProperties.setType("table-row-properties"); + tableRowProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, tableBackgroundColor); + style.addNode(tableRowProperties); + } + else + { + final Object oldValue = tableRowProperties.getAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); + if (oldValue == null || TRANSPARENT.equals(oldValue)) + { + tableRowProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, tableBackgroundColor); + } + } + attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); + } + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_CELL, attrs)) + { + columnCounter++; + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + if (styleName != null) + { + final OfficeStyle cellStyle = getPredefinedStylesCollection().getStyle(OfficeToken.TABLE_CELL, styleName); + if (cellStyle != null) + { + final Section textProperties = (Section) cellStyle.getTextProperties(); + if (textProperties != null) + { + for (String i : FOPROPS) + { + textProperties.setAttribute(OfficeNamespaces.FO_NS, i, null); + } + textProperties.setAttribute(OfficeNamespaces.TEXT_NS, "display", null); + for (String i : STYLEPROPS) + { + textProperties.setAttribute(OfficeNamespaces.STYLE_NS, i, null); + } + } + final Section props = (Section) cellStyle.getTableCellProperties(); + if (props != null) + { + final Object raw = props.getAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR); + if (TRANSPARENT.equals(raw)) + { + props.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, null); + // cellStyle.removeNode(props); + } + } + } + attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, styleName); + } + + final String numColSpanStr = (String) attrs.getAttribute(namespace, NUMBERCOLUMNSSPANNED); + int initialColumnSpan = columnSpanCounter = 1; + if (numColSpanStr != null) + { + initialColumnSpan = Integer.parseInt(numColSpanStr); + columnSpanCounter = initialColumnSpan; + } + final int span = getColumnSpanForCell(tableCounter, columnCounter, initialColumnSpan); + if (initialColumnSpan > 1) + { + // add the initial column span to our column counter index (subtract 1, since it is counted by default) + columnCounter += initialColumnSpan - 1; + } + + // if (span < initialColumnSpan) + // { + // // ColumnBoundary cbs[] = getBoundariesForTable(tableCounter); + // // for (int i = 0; i < cbs.length; i++) + // // { + // // System.out.print(cbs[i].getBoundary() + " "); + // // } + // // System.out.println(); + // + // LOGGER.error("A cell cannot span less than the declared columns: Declared=" + initialColumnSpan + " Computed=" + // + span); + // } + + // there's no point to create number-columns-spanned attributes if we only span 1 column + if (span > 1) + { + attrs.setAttribute(namespace, NUMBERCOLUMNSSPANNED, "" + span); + currentSpan = span; + } + // we must also generate "covered-table-cell" elements for each column spanned + // but we'll do this in the endElement, after we close this OfficeToken.TABLE_CELL + } + + // All styles have to be processed or you will loose the paragraph-styles and inline text-styles. + // .. + performStyleProcessing(attrs); + + final AttributeList attrList = buildAttributeList(attrs); + xmlWriter.writeTag(namespace, elementType, attrList, XmlWriter.OPEN); + // System.out.println("elementType = " + elementType); + } + + private void collectBoundaryForElement(final AttributeMap attrs) + { + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, attrs)) + { + // A table row resets the column counter. + resetCurrentRowBoundaryMarker(); + } + else if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, attrs)) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + if (styleName == null) + { + // This should not happen, but if it does, we will ignore that cell. + return; + } + + final OfficeStyle style = getPredefinedStylesCollection().getStyle(OfficeToken.TABLE_COLUMN, styleName); + if (style == null) + { + // Now this is very bad. It means that there is no style defined with the given name. + return; + } + + final Element tableColumnProperties = style.getTableColumnProperties(); + String widthStr = (String) tableColumnProperties.getAttribute("column-width"); + widthStr = widthStr.substring(0, widthStr.indexOf(getUnitsOfMeasure(widthStr))); + final float val = Float.parseFloat(widthStr) * CELL_WIDTH_FACTOR; + addColumnWidthToRowBoundaryMarker((long) val); + ColumnBoundary currentRowBoundary = new ColumnBoundary(getCurrentRowBoundaryMarker()); + final List columnBoundaryList_ = getColumnBoundaryList(); + final int idx = columnBoundaryList_.indexOf(currentRowBoundary); + if (idx == -1) + { + columnBoundaryList_.add(currentRowBoundary); + } + else + { + currentRowBoundary = columnBoundaryList_.get(idx); + } + currentRowBoundary.addTableIndex(tableCounter); + } + } + + private String getUnitsOfMeasure(final String str) + { + if (unitsOfMeasure == null || "".equals(unitsOfMeasure)) + { + if (str == null || "".equals(str)) + { + unitsOfMeasure = "cm"; + return unitsOfMeasure; + } + + // build units of measure, set it + int i = str.length() - 1; + for (; i >= 0; i--) + { + final char c = str.charAt(i); + if (Character.isDigit(c) || c == '.' || c == ',') + { + break; + } + } + unitsOfMeasure = str.substring(i + 1); + } + return unitsOfMeasure; + } + + private void createTableShapes() throws ReportProcessingException + { + if (!shapes.isEmpty()) + { + try + { + final XmlWriter xmlWriter = getXmlWriter(); + // at this point we need to generate the table-columns section based on our boundary table + // + // + // .. + // + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.SHAPES, null, XmlWriterSupport.OPEN); + + + for (int i = 0; i < shapes.size(); i++) + { + final AttributeMap attrs = shapes.get(i); + final AttributeList attrList = buildAttributeList(attrs); + attrList.removeAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME); + xmlWriter.writeTag(OfficeNamespaces.DRAWING_NS, OfficeToken.FRAME, attrList, XmlWriterSupport.OPEN); + startChartProcessing(ole.get(i)); + + xmlWriter.writeCloseTag(); + } + xmlWriter.writeCloseTag(); + } + catch (IOException e) + { + throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); + } + } + } + + private void createTableColumns() throws ReportProcessingException + { + try + { + final XmlWriter xmlWriter = getXmlWriter(); + // at this point we need to generate the table-columns section based on our boundary table + // + // + // .. + // + // the first boundary is '0' which is a placeholder so we will ignore it + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS, null, XmlWriterSupport.OPEN); + + // blow away current column styles + // start processing at i=1 because we added a boundary for "0" which is virtual + final ColumnBoundary[] cba = getSortedColumnBoundaryArray(); + for (int i = 1; i < cba.length; i++) + { + final ColumnBoundary cb = cba[i]; + float columnWidth = cb.getBoundary(); + if (i > 1) + { + columnWidth -= cba[i - 1].getBoundary(); + } + columnWidth = columnWidth / CELL_WIDTH_FACTOR; + final OfficeStyle style = deriveStyle(OfficeToken.TABLE_COLUMN, ("co" + i + "_")); + final Section tableColumnProperties = new Section(); + tableColumnProperties.setType("table-column-properties"); + tableColumnProperties.setNamespace(style.getNamespace()); + final String width = String.format("%f", columnWidth); + tableColumnProperties.setAttribute(style.getNamespace(), + "column-width", width + getUnitsOfMeasure(null)); + style.addNode(tableColumnProperties); + + final AttributeList myAttrList = new AttributeList(); + myAttrList.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMN, myAttrList, XmlWriterSupport.CLOSE); + } + xmlWriter.writeCloseTag(); + } + catch (IOException e) + { + throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); + } + } + + protected void endOther(final AttributeMap attrs) throws DataSourceException, ReportProcessingException + { + if (ReportTargetUtil.isElementOfType(JFreeReportInfo.REPORT_NAMESPACE, OfficeToken.OBJECT_OLE, attrs) || oleHandled) + { + oleHandled = false; + return; + } + + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrs) && isElementBoundaryCollectionPass() && getCurrentRole() != ROLE_TEMPLATE) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + rowHeights.add(computeRowHeight(styleName)); + } + + if (isRepeatingSection() || isElementBoundaryCollectionPass()) + { + return; + } + + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + if (isFilteredNamespace(namespace)) + { + return; + } + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + if (OfficeNamespaces.DRAWING_NS.equals(namespace) && OfficeToken.FRAME.equals(elementType)) + { + return; + } + + // if this is the report namespace, write out a table definition .. + if (OfficeNamespaces.TABLE_NS.equals(namespace) && (OfficeToken.TABLE.equals(elementType) || OfficeToken.COVERED_TABLE_CELL.equals(elementType) || OfficeToken.TABLE_COLUMN.equals(elementType) || OfficeToken.TABLE_COLUMNS.equals(elementType))) + { + return; + } + + if (!paragraphHandled && OfficeNamespaces.TEXT_NS.equals(namespace) && OfficeToken.P.equals(elementType)) + { + if (!paragraphHandled) + { + return; + } + + paragraphHandled = false; + } + try + { + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeCloseTag(); + // table-cell elements may have a number-columns-spanned attribute which indicates how many + // 'covered-table-cell' elements we need to generate + generateCoveredTableCells(attrs); + } + catch (IOException e) + { + throw new ReportProcessingException(OfficeDocumentReportTarget.FAILED, e); + } + } + + private void generateCoveredTableCells(final AttributeMap attrs) throws IOException + { + if (!ReportTargetUtil.isElementOfType(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_CELL, attrs)) + { + return; + } + + // do this after we close the tag + final XmlWriter xmlWriter = getXmlWriter(); + // final Object attribute = attrs.getAttribute(OfficeNamespaces.TABLE_NS,NUMBERCOLUMNSSPANNED); + // final int span = TextUtilities.parseInt((String) attribute, 0); + final int span = currentSpan; + currentSpan = 0; + for (int i = 1; i < span; i++) + { + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.COVERED_TABLE_CELL, null, XmlWriter.CLOSE); + } + } + + public String getExportDescriptor() + { + return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_SPREADSHEET; + } + + // ///////////////////////////////////////////////////////////////////////// + public void processText(final String text) throws DataSourceException, ReportProcessingException + { + if (!(isRepeatingSection() || isElementBoundaryCollectionPass())) + { + handleParagraph(); + super.processText(text); + } + } + + public void processContent(final DataFlags value) throws DataSourceException, ReportProcessingException + { + if (!(isRepeatingSection() || isElementBoundaryCollectionPass())) + { + handleParagraph(); + super.processContent(value); + } + } + + protected String getStartContent() + { + return "spreadsheet"; + } + + protected void startContent(final AttributeMap attrs) throws IOException, DataSourceException, + ReportProcessingException + { + if (!isElementBoundaryCollectionPass()) + { + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, getStartContent(), null, XmlWriterSupport.OPEN); + + writeNullDate(); + + final AttributeMap tableAttributes = new AttributeMap(); + tableAttributes.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.NAMESPACE_ATTRIBUTE, OfficeNamespaces.TABLE_NS); + tableAttributes.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, Element.TYPE_ATTRIBUTE, OfficeToken.TABLE); + tableAttributes.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, generateInitialTableStyle()); + tableAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "name", "Report"); + + performStyleProcessing(tableAttributes); + + xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE, buildAttributeList(tableAttributes), XmlWriterSupport.OPEN); + createTableShapes(); + createTableColumns(); + } + } + + private String generateInitialTableStyle() throws ReportProcessingException + { + final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); + final OfficeStyles commonStyles = predefStyles.getAutomaticStyles(); + if (!commonStyles.containsStyle(OfficeToken.TABLE, "Initial_Table")) + { + final String masterPageName = createMasterPage(); + + final OfficeStyle tableStyle = new OfficeStyle(); + tableStyle.setStyleFamily(OfficeToken.TABLE); + tableStyle.setStyleName("Initial_Table"); + tableStyle.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); + final Element tableProperties = produceFirstChild(tableStyle, OfficeNamespaces.STYLE_NS, "table-properties"); + tableProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, TRANSPARENT); + commonStyles.addStyle(tableStyle); + } + return "Initial_Table"; + } + + private String createMasterPage() throws ReportProcessingException + { + final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); + final MasterPageFactory masterPageFactory = new MasterPageFactory(predefStyles.getMasterStyles()); + final OfficeMasterPage masterPage; + if (!masterPageFactory.containsMasterPage("Standard", null, null)) + { + masterPage = masterPageFactory.createMasterPage("Standard", null, null); + + final CSSNumericValue zeroLength = CSSNumericValue.createValue(CSSNumericType.CM, 0); + final String pageLayoutTemplate = masterPage.getPageLayout(); + if (pageLayoutTemplate == null) + { + // there is no pagelayout. Create one .. + final String derivedLayout = masterPageFactory.createPageStyle(getGlobalStylesCollection().getAutomaticStyles(), zeroLength, zeroLength); + masterPage.setPageLayout(derivedLayout); + } + else + { + final String derivedLayout = masterPageFactory.derivePageStyle(pageLayoutTemplate, + getPredefinedStylesCollection().getAutomaticStyles(), + getGlobalStylesCollection().getAutomaticStyles(), zeroLength, zeroLength); + masterPage.setPageLayout(derivedLayout); + } + + final OfficeStylesCollection officeStylesCollection = getGlobalStylesCollection(); + final OfficeMasterStyles officeMasterStyles = officeStylesCollection.getMasterStyles(); + officeMasterStyles.addMasterPage(masterPage); + } + else + { + masterPage = masterPageFactory.getMasterPage("Standard", null, null); + } + return masterPage.getStyleName(); + } + + protected void endContent(final AttributeMap attrs) throws IOException, DataSourceException, + ReportProcessingException + { + // todo + if (!isElementBoundaryCollectionPass()) + { + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeCloseTag(); + xmlWriter.writeCloseTag(); + } + } + + public void endReport(final ReportStructureRoot report) throws DataSourceException, ReportProcessingException + { + super.endReport(report); + setElementBoundaryCollectionPass(false); + resetTableCounter(); + columnCounter = 0; + copyMeta(); + } + + private boolean isElementBoundaryCollectionPass() + { + return elementBoundaryCollectionPass; + } + + private void setElementBoundaryCollectionPass(final boolean elementBoundaryCollectionPass) + { + this.elementBoundaryCollectionPass = elementBoundaryCollectionPass; + } + + private ColumnBoundary[] getSortedColumnBoundaryArray() + { + if (sortedBoundaryArray == null) + { + getColumnBoundaryList().add(new ColumnBoundary(0)); + sortedBoundaryArray = getColumnBoundaryList().toArray(new ColumnBoundary[getColumnBoundaryList().size()]); + Arrays.sort(sortedBoundaryArray); + } + return sortedBoundaryArray; + } + + private List getColumnBoundaryList() + { + return columnBoundaryList; + } + + private void addColumnWidthToRowBoundaryMarker(final long width) + { + currentRowBoundaryMarker += width; + } + + private long getCurrentRowBoundaryMarker() + { + return currentRowBoundaryMarker; + } + + private void resetTableCounter() + { + tableCounter = 0; + } + + private void resetCurrentRowBoundaryMarker() + { + currentRowBoundaryMarker = 0; + } + + private ColumnBoundary[] getBoundariesForTable(final int table) + { + if (boundariesForTableArray == null) + { + final List boundariesForTable = new ArrayList(); + final List boundaryList = getColumnBoundaryList(); + for (int i = 0; i < boundaryList.size(); i++) + { + final ColumnBoundary b = boundaryList.get(i); + if (b.isContainedByTable(table)) + { + boundariesForTable.add(b); + } + } + boundariesForTableArray = boundariesForTable.toArray(new ColumnBoundary[boundariesForTable.size()]); + Arrays.sort(boundariesForTableArray); + } + return boundariesForTableArray; + } + + private int getColumnSpanForCell(final int table, final int col, final int initialColumnSpan) + { + final ColumnBoundary[] globalBoundaries = getSortedColumnBoundaryArray(); + final ColumnBoundary[] tableBoundaries = getBoundariesForTable(table); + // how many column boundaries in the globalBoundaries list fall between the currentRowWidth and the next boundary + // for the current row + + float cellBoundary = tableBoundaries[col - 1].getBoundary(); + float cellWidth = tableBoundaries[col - 1].getBoundary(); + + if (col > 1) + { + cellWidth = cellWidth - tableBoundaries[col - 2].getBoundary(); + } + + if (initialColumnSpan > 1) + { + // ok we've got some additional spanning specified on the input + final int index = (col - 1) + (initialColumnSpan - 1); + cellWidth += tableBoundaries[index].getBoundary() - tableBoundaries[col - 1].getBoundary(); + cellBoundary = tableBoundaries[index].getBoundary(); + } + + int beginBoundaryIndex = 0; + int endBoundaryIndex = globalBoundaries.length - 1; + for (int i = 0; i < globalBoundaries.length; i++) + { + // find beginning boundary + if (globalBoundaries[i].getBoundary() <= cellBoundary - cellWidth) + { + beginBoundaryIndex = i; + } + if (globalBoundaries[i].getBoundary() <= cellBoundary) + { + endBoundaryIndex = i; + } + } + final int span = endBoundaryIndex - beginBoundaryIndex; + // span will be zero for the first column, so we adjust it to 1 + if (span == 0) + { + return 1; + } + // System.out.println("table = " + table + " col = " + col + " rowBoundaries.length = " + tableBoundaries.length + " + // cellWidth = " + cellWidth + " span = " + span); + return span; + } + + protected String getTargetMimeType() + { + return "application/vnd.oasis.opendocument.spreadsheet"; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/MasterPageFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/MasterPageFactory.java new file mode 100644 index 000000000000..4bc0ada7038c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/MasterPageFactory.java @@ -0,0 +1,407 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeMasterPage; +import org.libreoffice.report.pentaho.model.OfficeMasterStyles; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.PageLayout; +import org.libreoffice.report.pentaho.model.RawText; + +import java.util.HashMap; +import java.util.Map; + +import org.jfree.layouting.input.style.values.CSSNumericValue; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.util.AttributeNameGenerator; + + +/** + * Todo: Document me! + * + * @since 14.03.2007 + */ +public class MasterPageFactory +{ + + private static class MasterPageFactoryKey + { + + private final String template; + private final String pageHeader; + private final String pageFooter; + + public MasterPageFactoryKey(final String template, + final String pageHeader, + final String pageFooter) + { + this.template = template; + this.pageHeader = pageHeader; + this.pageFooter = pageFooter; + } + + public boolean equals(final Object o) + { + if (this != o) + { + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final MasterPageFactoryKey that = (MasterPageFactoryKey) o; + + if (pageFooter != null ? !pageFooter.equals( + that.pageFooter) : that.pageFooter != null) + { + return false; + } + if (pageHeader != null ? !pageHeader.equals( + that.pageHeader) : that.pageHeader != null) + { + return false; + } + if (template != null ? !template.equals( + that.template) : that.template != null) + { + return false; + } + } + + return true; + } + + public int hashCode() + { + int result = (template != null ? template.hashCode() : 0); + result = 31 * result + (pageHeader != null ? pageHeader.hashCode() : 0); + result = 31 * result + (pageFooter != null ? pageFooter.hashCode() : 0); + return result; + } + + public String getTemplate() + { + return template; + } + + public String getPageHeader() + { + return pageHeader; + } + + public String getPageFooter() + { + return pageFooter; + } + } + + private static class PageLayoutKey + { + + private final String templateName; + private final CSSNumericValue headerHeight; + private final CSSNumericValue footerHeight; + + public PageLayoutKey(final String templateName, + final CSSNumericValue headerHeight, + final CSSNumericValue footerHeight) + { + this.templateName = templateName; + this.headerHeight = headerHeight; + this.footerHeight = footerHeight; + } + + public String getTemplateName() + { + return templateName; + } + + public CSSNumericValue getHeaderHeight() + { + return headerHeight; + } + + public CSSNumericValue getFooterHeight() + { + return footerHeight; + } + + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final PageLayoutKey key = (PageLayoutKey) o; + + if (footerHeight != null ? !footerHeight.equals( + key.footerHeight) : key.footerHeight != null) + { + return false; + } + if (headerHeight != null ? !headerHeight.equals( + key.headerHeight) : key.headerHeight != null) + { + return false; + } + return !(templateName != null ? !templateName.equals( + key.templateName) : key.templateName != null); + + } + + public int hashCode() + { + int result; + result = (templateName != null ? templateName.hashCode() : 0); + result = 31 * result + (headerHeight != null ? headerHeight.hashCode() : 0); + result = 31 * result + (footerHeight != null ? footerHeight.hashCode() : 0); + return result; + } + } + // todo: Patch the page-layout ... + private static final String DEFAULT_PAGE_NAME = "Default"; + private final OfficeMasterStyles predefinedStyles; + private final AttributeNameGenerator masterPageNameGenerator; + private final Map masterPages; + private final AttributeNameGenerator pageLayoutNameGenerator; + private final Map pageLayouts; + + public MasterPageFactory(final OfficeMasterStyles predefinedStyles) + { + this.predefinedStyles = predefinedStyles; + this.masterPages = new HashMap(); + this.masterPageNameGenerator = new AttributeNameGenerator(); + this.pageLayouts = new HashMap(); + this.pageLayoutNameGenerator = new AttributeNameGenerator(); + } + + public OfficeMasterPage getMasterPage(final String template, + final String pageHeader, + final String pageFooter) + { + final MasterPageFactoryKey key = + new MasterPageFactoryKey(template, pageHeader, pageFooter); + return masterPages.get(key); + } + + public boolean containsMasterPage(final String template, + final String pageHeader, + final String pageFooter) + { + final MasterPageFactoryKey key = + new MasterPageFactoryKey(template, pageHeader, pageFooter); + return masterPages.containsKey(key); + } + + public OfficeMasterPage createMasterPage(final String template, + final String pageHeader, + final String pageFooter) + { + final MasterPageFactoryKey key = + new MasterPageFactoryKey(template, pageHeader, pageFooter); + final OfficeMasterPage cached = masterPages.get(key); + if (cached != null) + { + return cached; + } + + final String targetName = (masterPages.isEmpty()) ? "Standard" : template; + + OfficeMasterPage predef = predefinedStyles.getMasterPage(template); + if (predef == null) + { + // This is a 'magic' name .. + // todo: It could be that this should be called 'Standard' instead + predef = predefinedStyles.getMasterPage(MasterPageFactory.DEFAULT_PAGE_NAME); + } + + if (predef != null) + { + try + { + // derive + final OfficeMasterPage derived = (OfficeMasterPage) predef.clone(); + return setupMasterPage(derived, targetName, pageHeader, pageFooter, + key); + } + catch (CloneNotSupportedException cne) + { + throw new IllegalStateException("Implementation error: Unable to derive page", cne); + } + } + + final OfficeMasterPage masterPage = new OfficeMasterPage(); + masterPage.setNamespace(OfficeNamespaces.STYLE_NS); + masterPage.setType("master-page"); + return setupMasterPage(masterPage, targetName, pageHeader, pageFooter, key); + } + + private OfficeMasterPage setupMasterPage(final OfficeMasterPage derived, + final String targetName, + final String pageHeader, + final String pageFooter, + final MasterPageFactoryKey key) + { + derived.setStyleName(masterPageNameGenerator.generateName(targetName)); + masterPages.put(key, derived); + + if (pageHeader != null) + { + final Section header = new Section(); + header.setNamespace(OfficeNamespaces.STYLE_NS); + header.setType("header"); + header.addNode(new RawText(pageHeader)); + derived.addNode(header); + } + + if (pageFooter != null) + { + final Section footer = new Section(); + footer.setNamespace(OfficeNamespaces.STYLE_NS); + footer.setType("footer"); + footer.addNode(new RawText(pageFooter)); + derived.addNode(footer); + } + + return derived; + } + + public String createPageStyle(final OfficeStyles commonStyles, + final CSSNumericValue headerHeight, + final CSSNumericValue footerHeight) + { + final PageLayoutKey key = + new PageLayoutKey(null, headerHeight, footerHeight); + final PageLayout derived = new PageLayout(); + final String name = pageLayoutNameGenerator.generateName("autogenerated"); + derived.setStyleName(name); + commonStyles.addPageStyle(derived); + + if (headerHeight != null) + { + final Section headerStyle = new Section(); + headerStyle.setNamespace(OfficeNamespaces.STYLE_NS); + headerStyle.setType("header-style"); + derived.addNode(headerStyle); + MasterPageFactory.applyHeaderFooterHeight(headerStyle, headerHeight); + } + + if (footerHeight != null) + { + final Section footerStyle = new Section(); + footerStyle.setNamespace(OfficeNamespaces.STYLE_NS); + footerStyle.setType("footer-style"); + derived.addNode(footerStyle); + MasterPageFactory.applyHeaderFooterHeight(footerStyle, footerHeight); + } + pageLayouts.put(key, name); + return name; + } + + public String derivePageStyle(final String pageStyleTemplate, + final OfficeStyles predefined, + final OfficeStyles commonStyles, + final CSSNumericValue headerHeight, + final CSSNumericValue footerHeight) + throws ReportProcessingException + { + if (pageStyleTemplate == null) + { + throw new NullPointerException("A style-name must be given"); + } + + final PageLayoutKey key = + new PageLayoutKey(pageStyleTemplate, headerHeight, footerHeight); + final String pageLayoutName = pageLayouts.get(key); + if (pageLayoutName != null) + { + // there's already a suitable version included. + return pageLayoutName; + } + + final PageLayout original = predefined.getPageStyle(pageStyleTemplate); + if (original == null) + { + throw new ReportProcessingException("Invalid page-layout '" + pageStyleTemplate + "', will not continue."); + } + + try + { + final PageLayout derived = (PageLayout) original.clone(); + final String name = pageLayoutNameGenerator.generateName( + pageStyleTemplate); + derived.setStyleName(name); + commonStyles.addPageStyle(derived); + + if (headerHeight != null) + { + Section headerStyle = derived.getHeaderStyle(); + if (headerStyle == null) + { + headerStyle = new Section(); + headerStyle.setNamespace(OfficeNamespaces.STYLE_NS); + headerStyle.setType("header-style"); + derived.addNode(headerStyle); + } + MasterPageFactory.applyHeaderFooterHeight(headerStyle, headerHeight); + } + + if (footerHeight != null) + { + Section footerStyle = derived.getFooterStyle(); + if (footerStyle == null) + { + footerStyle = new Section(); + footerStyle.setNamespace(OfficeNamespaces.STYLE_NS); + footerStyle.setType("footer-style"); + derived.addNode(footerStyle); + } + + MasterPageFactory.applyHeaderFooterHeight(footerStyle, footerHeight); + } + pageLayouts.put(key, name); + return name; + } + catch (CloneNotSupportedException e) + { + throw new IllegalStateException("Clone failed.", e); + } + } + + private static void applyHeaderFooterHeight(final Section headerFooterStyle, + final CSSNumericValue style) + { + Element headerFooterProps = headerFooterStyle.findFirstChild(OfficeNamespaces.STYLE_NS, "header-footer-properties"); + if (headerFooterProps == null) + { + headerFooterProps = new Section(); + headerFooterProps.setNamespace(OfficeNamespaces.STYLE_NS); + headerFooterProps.setType("header-footer-properties"); + headerFooterStyle.addNode(headerFooterProps); + } + headerFooterProps.setAttribute(OfficeNamespaces.SVG_NS, "height", style.getValue() + style.getType().getType()); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageBreakDefinition.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageBreakDefinition.java new file mode 100644 index 000000000000..e92e644eca4f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageBreakDefinition.java @@ -0,0 +1,39 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + +/** + * Todo: Document me! + * + * @since 24.03.2007 + */ +public class PageBreakDefinition +{ + + private final boolean resetPageNumber; + + public PageBreakDefinition(final boolean resetPageNumber) + { + this.resetPageNumber = resetPageNumber; + } + + public boolean isResetPageNumber() + { + return resetPageNumber; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageContext.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageContext.java new file mode 100644 index 000000000000..157dec4bf017 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/PageContext.java @@ -0,0 +1,218 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + +import org.libreoffice.report.pentaho.styles.LengthCalculator; + +import org.jfree.layouting.input.style.values.CSSNumericValue; + +/** + * Todo: Document me! + * + * @since 24.03.2007 + */ +public class PageContext +{ + + public static final int KEEP_TOGETHER_OFF = 0; + public static final int KEEP_TOGETHER_GROUP = 1; + public static final int KEEP_TOGETHER_FIRST_DETAIL = 2; + private PageContext parent; + private String header; + private CSSNumericValue headerHeight; + private String footer; + private CSSNumericValue footerHeight; + private int keepTogether; + private Integer columnCount = null; + private boolean sectionOpen; + + public PageContext() + { + this(null); + } + + public PageContext(final PageContext parent) + { + this.parent = parent; + if (parent != null) + { + this.keepTogether = parent.getKeepTogether(); + } + } + + public int getActiveColumns() + { + PageContext pc = this; + while (pc != null) + { + // TODO: IS this code correct? Why not columnCount = pc.getColumnCount(); ? + if (columnCount != null) + { + return columnCount; + } + pc = pc.getParent(); + } + return 1; + } + + public void setColumnCount(final Integer columnCount) + { + this.columnCount = columnCount; + } + + public Integer getColumnCount() + { + return columnCount; + } + + public String getHeader() + { + return header; + } + + public void setHeader(final String header, final CSSNumericValue height) + { + this.header = header; + this.headerHeight = height; + } + + public String getFooter() + { + return footer; + } + + public CSSNumericValue getHeaderHeight() + { + return headerHeight; + } + + public CSSNumericValue getFooterHeight() + { + return footerHeight; + } + + public void setFooter(final String footer, final CSSNumericValue height) + { + this.footer = footer; + this.footerHeight = height; + } + + public int getKeepTogether() + { + return keepTogether; + } + + public void setKeepTogether(final int keepTogether) + { + this.keepTogether = keepTogether; + } + + public PageContext getParent() + { + return parent; + } + + public CSSNumericValue getAllFooterSize() + { + if (parent == null) + { + return footerHeight; + } + + final LengthCalculator lnc = new LengthCalculator(); + PageContext pc = this; + while (pc != null) + { + lnc.add(pc.getFooterHeight()); + pc = pc.getParent(); + } + return lnc.getResult(); + } + + public CSSNumericValue getAllHeaderSize() + { + if (parent == null) + { + return headerHeight; + } + + final LengthCalculator lnc = new LengthCalculator(); + PageContext pc = this; + while (pc != null) + { + lnc.add(pc.getHeaderHeight()); + pc = pc.getParent(); + } + return lnc.getResult(); + } + + public String getPageFooterContent() + { + if (parent == null) + { + return getFooter(); + } + + final StringBuffer b = new StringBuffer(); + + PageContext pc = this; + while (pc != null) + { + final String footer_ = pc.getFooter(); + if (footer_ != null) + { + b.append(footer_); + } + pc = pc.getParent(); + } + + if (b.length() != 0) + { + return b.toString(); + } + return null; + } + + public String getPageHeaderContent() + { + if (parent == null) + { + return getHeader(); + } + + final StringBuffer b = new StringBuffer(); + b.append(parent.getPageHeaderContent()); + b.append(getHeader()); + + if (b.length() != 0) + { + return b.toString(); + } + return null; + } + + public boolean isSectionOpen() + { + return sectionOpen; + } + + public void setSectionOpen(final boolean sectionOpen) + { + this.sectionOpen = sectionOpen; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportProcessor.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportProcessor.java new file mode 100644 index 000000000000..b0dd06eab9ff --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportProcessor.java @@ -0,0 +1,106 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.pentaho.PentahoFormulaContext; + +import org.jfree.report.ReportProcessingException; +import org.jfree.report.data.ReportContextImpl; +import org.jfree.report.flow.ReportContext; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTarget; +import org.jfree.report.flow.SinglePassReportProcessor; + +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + +/** + * Creation-Date: 03.07.2006, 17:08:25 + * + */ +public class TextRawReportProcessor extends SinglePassReportProcessor +{ + + private final OutputRepository outputRepository; + private final String targetName; + private final InputRepository inputRepository; + private final ImageService imageService; + private final DataSourceFactory dataSourceFactory; + + public TextRawReportProcessor(final InputRepository inputRepository, + final OutputRepository outputRepository, + final String targetName, + final ImageService imageService, + final DataSourceFactory dataSourceFactory) + { + if (inputRepository == null) + { + throw new NullPointerException(); + } + if (outputRepository == null) + { + throw new NullPointerException(); + } + if (targetName == null) + { + throw new NullPointerException(); + } + if (imageService == null) + { + throw new NullPointerException(); + } + if (dataSourceFactory == null) + { + throw new NullPointerException(); + } + + this.targetName = targetName; + this.inputRepository = inputRepository; + this.outputRepository = outputRepository; + this.imageService = imageService; + this.dataSourceFactory = dataSourceFactory; + } + + protected ReportTarget createReportTarget(final ReportJob job) + throws ReportProcessingException + { + final ReportStructureRoot report = job.getReportStructureRoot(); + final ResourceManager resourceManager = report.getResourceManager(); + + return new TextRawReportTarget(job, resourceManager, report.getBaseResource(), + inputRepository, outputRepository, targetName, imageService, dataSourceFactory); + } + + protected ReportContext createReportContext(final ReportJob job, + final ReportTarget target) + { + final ReportContext context = super.createReportContext(job, target); + if (context instanceof ReportContextImpl) + { + final ReportContextImpl impl = (ReportContextImpl) context; + impl.setFormulaContext(new PentahoFormulaContext(impl.getFormulaContext(), job.getConfiguration())); + } + return context; + } +} + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java new file mode 100644 index 000000000000..9532fcc7a190 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/TextRawReportTarget.java @@ -0,0 +1,1444 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.ImageService; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.PentahoReportEngineMetaData; +import org.libreoffice.report.pentaho.layoutprocessor.FormatValueUtility; +import org.libreoffice.report.pentaho.model.OfficeMasterPage; +import org.libreoffice.report.pentaho.model.OfficeMasterStyles; +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.model.PageSection; +import org.libreoffice.report.pentaho.output.OfficeDocumentReportTarget; +import org.libreoffice.report.pentaho.output.StyleUtilities; +import org.libreoffice.report.pentaho.styles.LengthCalculator; + +import java.io.IOException; + +import java.io.OutputStream; +import java.io.OutputStreamWriter; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; + + +import org.jfree.layouting.input.style.values.CSSNumericValue; +import org.jfree.layouting.util.AttributeMap; +import org.jfree.report.DataSourceException; +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.ReportProcessingException; +import org.jfree.report.flow.ReportJob; +import org.jfree.report.flow.ReportStructureRoot; +import org.jfree.report.flow.ReportTargetUtil; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.util.AttributeNameGenerator; +import org.jfree.report.util.IntegerCache; + +import org.pentaho.reporting.libraries.base.util.FastStack; +import org.pentaho.reporting.libraries.base.util.ObjectUtilities; +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + + +/** + * Creation-Date: 03.07.2006, 16:28:00 + * + */ +public class TextRawReportTarget extends OfficeDocumentReportTarget +{ + + private static final String ALWAYS = "always"; + private static final String KEEP_TOGETHER = "keep-together"; + private static final String KEEP_WITH_NEXT = "keep-with-next"; + private static final String MAY_BREAK_BETWEEN_ROWS = "may-break-between-rows"; + private static final String NAME = "name"; + private static final String NONE = "none"; + private static final String NORMAL = "normal"; + private static final String PARAGRAPH_PROPERTIES = "paragraph-properties"; + private static final String STANDARD = "Standard"; + private static final String TABLE_PROPERTIES = "table-properties"; + private static final String VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT = "variables_paragraph_with_next"; + private static final String VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT = "variables_paragraph_without_next"; + private static final int TABLE_LAYOUT_VARIABLES_PARAGRAPH = 0; + private static final int TABLE_LAYOUT_SINGLE_DETAIL_TABLE = 2; + private static final int CP_SETUP = 0; + private static final int CP_FIRST_TABLE = 1; + private static final int CP_NEXT_TABLE = 2; + // This is the initial state of the detail-band processing. It states, that we are now waiting for a + // detail-band to be printed. + private static final int DETAIL_SECTION_WAIT = 0; + // The first detail section has started. + private static final int DETAIL_SECTION_FIRST_STARTED = 1; + // The first detail section has been printed. + private static final int DETAIL_SECTION_FIRST_PRINTED = 2; + // An other detail section has started + private static final int DETAIL_SECTION_OTHER_STARTED = 3; + // The other detail section has been printed. + private static final int DETAIL_SECTION_OTHER_PRINTED = 4; + private boolean pageFooterOnReportFooter; + private boolean pageFooterOnReportHeader; + private boolean pageHeaderOnReportFooter; + private boolean pageHeaderOnReportHeader; + private int contentProcessingState; + private OfficeMasterPage currentMasterPage; + private final FastStack activePageContext; + private MasterPageFactory masterPageFactory; + private LengthCalculator sectionHeight; + private String variables; + private PageBreakDefinition pageBreakDefinition; + private VariablesDeclarations variablesDeclarations; + private boolean columnBreakPending; + private boolean sectionKeepTogether; + private final AttributeNameGenerator sectionNames; + private int detailBandProcessingState; + private final int tableLayoutConfig; + private int expectedTableRowCount; + private boolean firstCellSeen; + + public TextRawReportTarget(final ReportJob reportJob, + final ResourceManager resourceManager, + final ResourceKey baseResource, + final InputRepository inputRepository, + final OutputRepository outputRepository, + final String target, + final ImageService imageService, + final DataSourceFactory datasourcefactory) + throws ReportProcessingException + { + super(reportJob, resourceManager, baseResource, inputRepository, outputRepository, target, imageService, datasourcefactory); + activePageContext = new FastStack(); + this.sectionNames = new AttributeNameGenerator(); + + this.tableLayoutConfig = TABLE_LAYOUT_SINGLE_DETAIL_TABLE; + } + + protected String getTargetMimeType() + { + return "application/vnd.oasis.opendocument.text"; + } + + /** + * Checks, whether a manual page break should be inserted at the next possible location. + * + * @return true, if a pagebreak is pending, false otherwise. + */ + private boolean isPagebreakPending() + { + return pageBreakDefinition != null; + } + + private boolean isResetPageNumber() + { + return pageBreakDefinition != null && pageBreakDefinition.isResetPageNumber(); + } + + /** + * Defines, whether a manual pagebreak should be inserted at the next possible location. + * + * @param pageBreakDefinition the new flag value. + */ + private void setPagebreakDefinition(final PageBreakDefinition pageBreakDefinition) + { + this.pageBreakDefinition = pageBreakDefinition; + } + + private PageBreakDefinition getPagebreakDefinition() + { + return pageBreakDefinition; + } + + // todo + private boolean isKeepTableWithNext() + { + final int keepTogetherState = getCurrentContext().getKeepTogether(); + if (keepTogetherState == PageContext.KEEP_TOGETHER_GROUP) + { + return true; + } + + final boolean keepWithNext; + keepWithNext = keepTogetherState == PageContext.KEEP_TOGETHER_FIRST_DETAIL && (detailBandProcessingState == DETAIL_SECTION_WAIT); + return keepWithNext; + } + + private boolean isSectionPagebreakAfter(final AttributeMap attrs) + { + final Object forceNewPage = + attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "force-new-page"); + return "after-section".equals(forceNewPage) || "before-after-section".equals(forceNewPage); + } + + private boolean isSectionPagebreakBefore(final AttributeMap attrs) + { + final Object forceNewPage = + attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "force-new-page"); + return "before-section".equals(forceNewPage) || "before-after-section".equals(forceNewPage); + } + + private PageContext getCurrentContext() + { + return (PageContext) activePageContext.peek(); + } + + private String createMasterPage(final boolean printHeader, + final boolean printFooter) + throws ReportProcessingException + { + // create the master page for the report-header. + // If there is a page-header or footer in the report that gets + // surpressed on the report-header, we have to insert a pagebreak + // afterwards. + + final String activePageFooter; + // Check, whether the report header can have a page-header + final PageContext context = getCurrentContext(); + if (printFooter) + { + activePageFooter = context.getPageFooterContent(); + } + else + { + activePageFooter = null; + } + final String activePageHeader; + if (printHeader) + { + // we have to insert a manual pagebreak after the report header. + activePageHeader = context.getPageHeaderContent(); + } + else + { + activePageHeader = null; + } + + final String masterPageName; + if (currentMasterPage == null || !masterPageFactory.containsMasterPage(STANDARD, activePageHeader, activePageFooter)) + { + + final CSSNumericValue headerSize = context.getAllHeaderSize(); + final CSSNumericValue footerSize = context.getAllFooterSize(); + + + currentMasterPage = masterPageFactory.createMasterPage(STANDARD, activePageHeader, activePageFooter); + +// LOGGER.debug("Created a new master-page: " + currentMasterPage.getStyleName()); + + // todo: Store the page-layouts as well. + // The page layouts are derived from a common template, but as the + // header-heights differ, we have to derive these beasts instead + // of copying them + + final OfficeStylesCollection officeStylesCollection = getGlobalStylesCollection(); + final OfficeMasterStyles officeMasterStyles = officeStylesCollection.getMasterStyles(); + final String pageLayoutTemplate = currentMasterPage.getPageLayout(); + if (pageLayoutTemplate == null) + { + // there is no pagelayout. Create one .. + final String derivedLayout = masterPageFactory.createPageStyle(getGlobalStylesCollection().getAutomaticStyles(), headerSize, footerSize); + currentMasterPage.setPageLayout(derivedLayout); + } + else + { + final String derivedLayout = masterPageFactory.derivePageStyle(pageLayoutTemplate, + getPredefinedStylesCollection().getAutomaticStyles(), + getGlobalStylesCollection().getAutomaticStyles(), headerSize, footerSize); + currentMasterPage.setPageLayout(derivedLayout); + } + officeMasterStyles.addMasterPage(currentMasterPage); + masterPageName = currentMasterPage.getStyleName(); + } + else + { + // retrieve the master-page. + final OfficeMasterPage masterPage = masterPageFactory.getMasterPage(STANDARD, activePageHeader, activePageFooter); + if (ObjectUtilities.equal(masterPage.getStyleName(), currentMasterPage.getStyleName())) + { + // They are the same, + masterPageName = null; + } + else + { + // reuse the existing one .. + currentMasterPage = masterPage; + masterPageName = currentMasterPage.getStyleName(); + } + } + + // if either the pageheader or footer are *not* printed with the + // report header, then this implies that we have to insert a manual + // pagebreak at the end of the section. + + if ((!printHeader && context.getHeader() != null) || (!printFooter && context.getFooter() != null)) + { + setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); + } + + return masterPageName; + } + + private boolean isColumnBreakPending() + { + return columnBreakPending; + } + + private void setColumnBreakPending(final boolean columnBreakPending) + { + this.columnBreakPending = columnBreakPending; + } + + private Integer parseInt(final Object value) + { + if (value instanceof Number) + { + final Number n = (Number) value; + return IntegerCache.getInteger(n.intValue()); + } + if (value instanceof String) + { + try + { + return IntegerCache.getInteger(Integer.parseInt((String) value)); + } + catch (NumberFormatException nfe) + { + //return null; // ignore + } + } + return null; + } + + private BufferState applyColumnsToPageBand(final BufferState contents, + final int numberOfColumns) + throws IOException, ReportProcessingException + { + if (numberOfColumns <= 1) + { + return contents; + } + startBuffering(getGlobalStylesCollection(), true); + // derive section style .. + + // This is a rather cheap solution to the problem. In a sane world, we would have to feed the + // footer multiple times. Right now, we simply rely on the balacing, which should make sure that + // the column's content are evenly distributed. + final XmlWriter writer = getXmlWriter(); + final AttributeList attrs = new AttributeList(); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, generateSectionStyle(numberOfColumns)); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, sectionNames.generateName("Section")); + writer.writeTag(OfficeNamespaces.TEXT_NS, "section", attrs, XmlWriterSupport.OPEN); + for (int i = 0; i < numberOfColumns; i++) + { + writer.writeStream(contents.getXmlAsReader()); + } + + writer.writeCloseTag(); + return finishBuffering(); + } + + private String generateSectionStyle(final int columnCount) + { + final OfficeStyles automaticStyles = getStylesCollection().getAutomaticStyles(); + final String styleName = getAutoStyleNameGenerator().generateName("auto_section_style"); + + final Section sectionProperties = new Section(); + sectionProperties.setNamespace(OfficeNamespaces.STYLE_NS); + sectionProperties.setType("section-properties"); + sectionProperties.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, "transparent"); + sectionProperties.setAttribute(OfficeNamespaces.TEXT_NS, "dont-balance-text-columns", OfficeToken.FALSE); + sectionProperties.setAttribute(OfficeNamespaces.STYLE_NS, "editable", OfficeToken.FALSE); + + if (columnCount > 1) + { + final Section columns = new Section(); + columns.setNamespace(OfficeNamespaces.STYLE_NS); + columns.setType("columns"); + columns.setAttribute(OfficeNamespaces.FO_NS, "column-count", String.valueOf(columnCount)); + columns.setAttribute(OfficeNamespaces.STYLE_NS, "column-gap", "0cm"); + sectionProperties.addNode(columns); + +// final Section columnSep = new Section(); +// columnSep.setNamespace(OfficeNamespaces.STYLE_NS); +// columnSep.setType("column-sep"); +// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "width", "0.035cm"); +// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "color", "#000000"); +// columnSep.setAttribute(OfficeNamespaces.STYLE_NS, "height", "100%"); +// columns.addNode(columnSep); + + for (int i = 0; i < columnCount; i++) + { + final Section column = new Section(); + column.setNamespace(OfficeNamespaces.STYLE_NS); + column.setType("column"); + column.setAttribute(OfficeNamespaces.STYLE_NS, "rel-width", "1*"); + column.setAttribute(OfficeNamespaces.FO_NS, "start-indent", "0cm"); + column.setAttribute(OfficeNamespaces.FO_NS, "end-indent", "0cm"); + columns.addNode(column); + } + } + + final OfficeStyle style = new OfficeStyle(); + style.setNamespace(OfficeNamespaces.STYLE_NS); + style.setType("style"); + style.setAttribute(OfficeNamespaces.STYLE_NS, NAME, styleName); + style.setAttribute(OfficeNamespaces.STYLE_NS, "family", "section"); + style.addNode(sectionProperties); + + automaticStyles.addStyle(style); + return styleName; + } + + /** + * Starts the output of a new office document. This method writes the generic 'office:document-content' tag along with + * all known namespace declarations. + * + * @param report the report object. + * @throws org.jfree.report.DataSourceException + * if there was an error accessing the datasource + * @throws org.jfree.report.ReportProcessingException + * if some other error occured. + */ + public void startReport(final ReportStructureRoot report) + throws DataSourceException, ReportProcessingException + { + super.startReport(report); + variablesDeclarations = new VariablesDeclarations(); + detailBandProcessingState = DETAIL_SECTION_WAIT; + sectionNames.reset(); + + pageFooterOnReportFooter = false; + pageFooterOnReportHeader = false; + pageHeaderOnReportFooter = false; + pageHeaderOnReportHeader = false; + contentProcessingState = TextRawReportTarget.CP_SETUP; + + activePageContext.clear(); + activePageContext.push(new PageContext()); + + final OfficeStylesCollection predefStyles = getPredefinedStylesCollection(); + masterPageFactory = new MasterPageFactory(predefStyles.getMasterStyles()); + + predefStyles.getAutomaticStyles().addStyle(createVariablesStyle(true)); + predefStyles.getAutomaticStyles().addStyle(createVariablesStyle(false)); + } + + private OfficeStyle createVariablesStyle(final boolean keepWithNext) + { + final OfficeStyle variablesSectionStyle = new OfficeStyle(); + variablesSectionStyle.setStyleFamily(OfficeToken.PARAGRAPH); + if (keepWithNext) + { + variablesSectionStyle.setStyleName(TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); + } + else + { + variablesSectionStyle.setStyleName(TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT); + } + + final Section paragraphProps = new Section(); + paragraphProps.setNamespace(OfficeNamespaces.STYLE_NS); + paragraphProps.setType(PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, OfficeToken.BACKGROUND_COLOR, "transparent"); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "text-align", "start"); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_TOGETHER, ALWAYS); + paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-align", "top"); + variablesSectionStyle.addNode(paragraphProps); + + final Section textProps = new Section(); + textProps.setNamespace(OfficeNamespaces.STYLE_NS); + textProps.setType("text-properties"); + textProps.setAttribute(OfficeNamespaces.FO_NS, "font-variant", NORMAL); + textProps.setAttribute(OfficeNamespaces.FO_NS, "text-transform", NONE); + textProps.setAttribute(OfficeNamespaces.FO_NS, "color", "#ffffff"); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-outline", OfficeToken.FALSE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-blinking", OfficeToken.FALSE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-line-through-style", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-line-through-mode", "continuous"); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-position", "0% 100%"); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "font-name", "Tahoma"); + textProps.setAttribute(OfficeNamespaces.FO_NS, "font-size", "1pt"); + textProps.setAttribute(OfficeNamespaces.FO_NS, "letter-spacing", NORMAL); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "letter-kerning", OfficeToken.FALSE); + textProps.setAttribute(OfficeNamespaces.FO_NS, "font-style", NORMAL); + textProps.setAttribute(OfficeNamespaces.FO_NS, "text-shadow", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-underline-style", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-underline-mode", "continuous"); + textProps.setAttribute(OfficeNamespaces.FO_NS, "font-weight", NORMAL); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-rotation-angle", "0"); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-emphasize", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine-start-char", ""); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-combine-end-char", ""); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-blinking", OfficeToken.FALSE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-scale", "100%"); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "font-relief", NONE); + textProps.setAttribute(OfficeNamespaces.STYLE_NS, "text-display", NONE); + variablesSectionStyle.addNode(textProps); + return variablesSectionStyle; + } + + protected void startContent(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "text", null, XmlWriterSupport.OPEN); + + writeNullDate(); + + // now start the buffering. We have to insert the variables declaration + // later .. + startBuffering(getStylesCollection(), true); + + final Object columnCountRaw = attrs.getAttribute(OfficeNamespaces.FO_NS, "column-count"); + final Integer colCount = parseInt(columnCountRaw); + if (colCount != null) + { + final PageContext pageContext = getCurrentContext(); + pageContext.setColumnCount(colCount); + } + + } + + protected void startOther(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + + if (ObjectUtilities.equal(JFreeReportInfo.REPORT_NAMESPACE, namespace)) + { + if (ObjectUtilities.equal(OfficeToken.IMAGE, elementType)) + { + startImageProcessing(attrs); + } + else if (ObjectUtilities.equal(OfficeToken.OBJECT_OLE, elementType) && getCurrentRole() != ROLE_TEMPLATE) + { + startChartProcessing(attrs); + } + return; + } + else if (isFilteredNamespace(namespace)) + { + throw new IllegalStateException("This element should be hidden: " + namespace + ", " + elementType); + } + + if (isTableMergeActive() && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace) && ObjectUtilities.equal(OfficeToken.TABLE_COLUMNS, elementType)) + { + // Skip the columns section if the tables get merged.. + startBuffering(getStylesCollection(), true); + } + else + { + openSection(); + + final boolean isTableNS = ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace); + if (isTableNS) + { + if (ObjectUtilities.equal(OfficeToken.TABLE, elementType)) + { + startTable(attrs); + return; + } + + if (ObjectUtilities.equal(OfficeToken.TABLE_ROW, elementType)) + { + startRow(attrs); + return; + } + } + + + if (ObjectUtilities.equal(OfficeNamespaces.TEXT_NS, namespace)) + { + if (ObjectUtilities.equal("variable-set", elementType)) + { + // update the variables-declaration thingie .. + final String varName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, NAME); + final String varType = (String) attrs.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); + final String newVarName = variablesDeclarations.produceVariable(varName, varType); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, newVarName); + } + else if (ObjectUtilities.equal("variable-get", elementType)) + { + final String varName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, NAME); + final String varType = (String) attrs.getAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE); + final String newVarName = variablesDeclarations.produceVariable(varName, varType); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, newVarName); + // this one must not be written, as the DTD does not declare it. + // attrs.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, null); + } + } + + if (tableLayoutConfig == TABLE_LAYOUT_VARIABLES_PARAGRAPH && variables != null) + { + // This cannot happen as long as the report sections only contain tables. But at some point in the + // future they will be made of paragraphs, and then we are prepared .. + // LOGGER.debug("Variables-Section in own paragraph " + variables); + + StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), + getGlobalStylesCollection(), getPredefinedStylesCollection()); + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.OPEN); + xmlWriter.writeText(variables); + xmlWriter.writeCloseTag(); + variables = null; + } + + final boolean keepTogetherOnParagraph = true; + + if (keepTogetherOnParagraph) + { + if (ReportTargetUtil.isElementOfType(OfficeNamespaces.TEXT_NS, OfficeToken.P, attrs)) + { + final int keepTogetherState = getCurrentContext().getKeepTogether(); + if (!firstCellSeen && (sectionKeepTogether || keepTogetherState == PageContext.KEEP_TOGETHER_GROUP)) + { + OfficeStyle style = null; + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME); + if (styleName == null) + { + final boolean keep = (keepTogetherState == PageContext.KEEP_TOGETHER_GROUP || expectedTableRowCount > 0) && isParentKeepTogether(); + final ArrayList propertyNameSpaces = new ArrayList(); + final ArrayList propertyNames = new ArrayList(); + final ArrayList propertyValues = new ArrayList(); + + propertyNameSpaces.add(OfficeNamespaces.FO_NS); + propertyNameSpaces.add(OfficeNamespaces.FO_NS); + propertyNames.add(KEEP_TOGETHER); + propertyValues.add(ALWAYS); + if (keep) + { + propertyNames.add(KEEP_WITH_NEXT); + propertyValues.add(ALWAYS); + } + else + { + propertyNames.add(KEEP_WITH_NEXT); + propertyValues.add(null); + } + style = StyleUtilities.queryStyleByProperties(getStylesCollection(), OfficeToken.PARAGRAPH, PARAGRAPH_PROPERTIES, propertyNameSpaces, propertyNames, propertyValues); + } + if (style == null) + { + style = deriveStyle(OfficeToken.PARAGRAPH, styleName); + // Lets set the 'keep-together' flag.. + + Element paragraphProps = style.getParagraphProperties(); + if (paragraphProps == null) + { + paragraphProps = new Section(); + paragraphProps.setNamespace(OfficeNamespaces.STYLE_NS); + paragraphProps.setType(PARAGRAPH_PROPERTIES); + style.addNode(paragraphProps); + } + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_TOGETHER, ALWAYS); + + // We prevent pagebreaks within the two adjacent rows (this one and the next one) if + // either a group-wide keep-together is defined or if we haven't reached the end of the + // current section yet. + if ((keepTogetherState == PageContext.KEEP_TOGETHER_GROUP || expectedTableRowCount > 0) && isParentKeepTogether()) + { + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); + } + } + + attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, style.getStyleName()); + } + } + } + + if (ObjectUtilities.equal(OfficeNamespaces.DRAWING_NS, namespace) && ObjectUtilities.equal(OfficeToken.FRAME, elementType)) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME); + final OfficeStyle predefAutoStyle = getPredefinedStylesCollection().getAutomaticStyles().getStyle(OfficeToken.GRAPHIC, styleName); + if (predefAutoStyle != null) + { + // special ole handling + final Element graphicProperties = predefAutoStyle.getGraphicProperties(); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, VERTICAL_POS, "from-top"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, HORIZONTAL_POS, "from-left"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "vertical-rel", "paragraph-content"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "horizontal-rel", "paragraph"); + graphicProperties.setAttribute(OfficeNamespaces.STYLE_NS, "flow-with-text", "false"); + graphicProperties.setAttribute(OfficeNamespaces.DRAWING_NS, "ole-draw-aspect", "1"); + + // attrs.setAttribute(OfficeNamespaces.DRAWING_NS, OfficeToken.STYLE_NAME, predefAutoStyle.getStyleName()); + } + } + + // process the styles as usual + performStyleProcessing(attrs); + final XmlWriter xmlWriter = getXmlWriter(); + final AttributeList attrList = buildAttributeList(attrs); + xmlWriter.writeTag(namespace, elementType, attrList, XmlWriterSupport.OPEN); + + if (tableLayoutConfig != TABLE_LAYOUT_VARIABLES_PARAGRAPH + && variables != null + && !isRepeatingSection() + && ReportTargetUtil.isElementOfType(OfficeNamespaces.TEXT_NS, OfficeToken.P, attrs)) + { + //LOGGER.debug("Variables-Section in existing cell " + variables); + xmlWriter.writeText(variables); + variables = null; + } + } + } + + private void startRow(final AttributeMap attrs) + throws IOException, ReportProcessingException + { + firstCellSeen = false; + expectedTableRowCount -= 1; + final String rowStyle = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + final CSSNumericValue rowHeight = computeRowHeight(rowStyle); + // LOGGER.debug("Adding row-Style: " + rowStyle + " " + rowHeight); + sectionHeight.add(rowHeight); + +// if (expectedTableRowCount > 0) +// { +// // Some other row. Create a keep-together +// +// } +// else +// { +// // This is the last row before the section will end. +// // or (in some weird cases) There is no information when the row will end. +// // Anyway, if we are here, we do not create a keep-together style on the table-row .. +// } + // process the styles as usual + performStyleProcessing(attrs); + + final AttributeList attrList = buildAttributeList(attrs); + getXmlWriter().writeTag(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_ROW, attrList, XmlWriterSupport.OPEN); + } + + private void startTable(final AttributeMap attrs) + throws ReportProcessingException, IOException + { + final Integer trc = (Integer) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "table-row-count"); + if (trc == null) + { + expectedTableRowCount = -1; + } + else + { + expectedTableRowCount = trc; + } + + if (isSectionPagebreakBefore(attrs)) + { + // force a pagebreak .. + setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); + } + + // its a table. This means, it is a root-level element + final PageBreakDefinition breakDefinition; + String masterPageName = null; + final int currentRole = getCurrentRole(); + if (contentProcessingState == TextRawReportTarget.CP_FIRST_TABLE) + { + contentProcessingState = TextRawReportTarget.CP_NEXT_TABLE; + + // Processing the report header now. + if (currentRole == OfficeDocumentReportTarget.ROLE_REPORT_HEADER) + { + breakDefinition = new PageBreakDefinition(isResetPageNumber()); + masterPageName = createMasterPage(pageHeaderOnReportHeader, pageFooterOnReportHeader); + if (masterPageName == null) + { + // we should always have a master-page ... + masterPageName = currentMasterPage.getStyleName(); + } + } + else if (currentRole == OfficeDocumentReportTarget.ROLE_REPORT_FOOTER) + { + breakDefinition = new PageBreakDefinition(isResetPageNumber()); + masterPageName = createMasterPage(pageHeaderOnReportFooter, pageFooterOnReportFooter); + if (masterPageName == null && isSectionPagebreakBefore(attrs)) + { + // If we have a manual pagebreak, then activate the current master-page again. + masterPageName = currentMasterPage.getStyleName(); + } + // But we skip this (and therefore the resulting pagebreak) if there is no manual break + // and no other condition that would force an break. + } + else if (currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || currentRole == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) + { + breakDefinition = null; + // no pagebreaks .. + } + else if (currentMasterPage == null || isPagebreakPending()) + { + // Must be the first table, as we have no master-page yet. + masterPageName = createMasterPage(true, true); + setPagebreakDefinition(null); + if (masterPageName == null) + { + // we should always have a master-page ... + masterPageName = currentMasterPage.getStyleName(); + } + breakDefinition = new PageBreakDefinition(isResetPageNumber()); + } + else + { + breakDefinition = null; + } + } + else if (isPagebreakPending() && currentRole != OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER && currentRole != OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) + { + // Derive an automatic style for the pagebreak. +// LOGGER.debug("Manual pagebreak (within the section): " + getCurrentRole()); + breakDefinition = getPagebreakDefinition(); + setPagebreakDefinition(null); + masterPageName = createMasterPage(true, true); + if (masterPageName == null || isSectionPagebreakBefore(attrs)) + { + // If we have a manual pagebreak, then activate the current master-page again. + masterPageName = currentMasterPage.getStyleName(); + } + } + else + { + breakDefinition = null; + } + + final XmlWriter xmlWriter = getXmlWriter(); + if (detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && masterPageName != null) + { + // close the last table-tag, we will open a new one + xmlWriter.writeCloseTag(); + // Reset the detail-state to 'started' so that the table's columns get printed now. + detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; + } + + if (tableLayoutConfig == TABLE_LAYOUT_VARIABLES_PARAGRAPH && variables != null) + { + if (masterPageName != null) + { + // write a paragraph that uses the VARIABLES_HIDDEN_STYLE as + // primary style. Derive that one and add the manual pagebreak. + // The predefined style already has the 'keep-together' flags set. +// LOGGER.debug("Variables-Section with new Master-Page " + variables + " " + masterPageName); + + final OfficeStyle style = deriveStyle(OfficeToken.PARAGRAPH, TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); + style.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); + if (breakDefinition.isResetPageNumber()) + { + final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); + } + if (isColumnBreakPending()) + { + final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "break-before", "column"); + setColumnBreakPending(false); + } + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, style.getStyleName(), XmlWriterSupport.OPEN); + + masterPageName = null; + //breakDefinition = null; + } + else if (isColumnBreakPending()) + { + setColumnBreakPending(false); + + final OfficeStyle style = deriveStyle(OfficeToken.PARAGRAPH, TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT); + final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); + + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, style.getStyleName(), XmlWriterSupport.OPEN); + } + else + { + // Write a paragraph without adding the pagebreak. We can reuse the global style, but we have to make + // sure that the style is part of the current 'auto-style' collection. +// LOGGER.debug("Variables-Section " + variables); + + StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), + getGlobalStylesCollection(), getPredefinedStylesCollection()); + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.OPEN); + } + xmlWriter.writeText(variables); + xmlWriter.writeCloseTag(); + variables = null; + } + + final boolean keepWithNext = isKeepTableWithNext(); + final boolean localKeepTogether = OfficeToken.TRUE.equals(attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, KEEP_TOGETHER)); + final boolean tableMergeActive = isTableMergeActive(); + this.sectionKeepTogether = tableMergeActive && localKeepTogether; + + // Check, whether we have a reason to derive a style... + if (masterPageName != null || (!tableMergeActive && (localKeepTogether || keepWithNext)) || isColumnBreakPending()) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + final OfficeStyle style = deriveStyle("table", styleName); + + if (masterPageName != null) + { +// LOGGER.debug("Starting a new MasterPage: " + masterPageName); + // Patch the current styles. + // This usually only happens on Table-Styles or Paragraph-Styles + style.setAttribute(OfficeNamespaces.STYLE_NS, "master-page-name", masterPageName); + if (breakDefinition.isResetPageNumber()) + { + final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.STYLE_NS, "page-number", "1"); + } + } + if (isColumnBreakPending()) + { + final Element paragraphProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, PARAGRAPH_PROPERTIES); + paragraphProps.setAttribute(OfficeNamespaces.FO_NS, "break-before", "column"); + setColumnBreakPending(false); + } + + // Inhibit breaks inside the table only if it has been defined and if we do not create one single + // big detail section. In that case, this flag would be invalid and would cause layout-errors. + if (!tableMergeActive) + { + if (localKeepTogether) + { + final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); + tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); + } + } + else + { + if (detailBandProcessingState == DETAIL_SECTION_WAIT) + { + detailBandProcessingState = DETAIL_SECTION_FIRST_STARTED; + } + else if (detailBandProcessingState == DETAIL_SECTION_FIRST_PRINTED) + { + detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; + } + } + if (keepWithNext) + { + boolean addKeepWithNext = true; + if (currentRole == ROLE_GROUP_FOOTER) + { + addKeepWithNext = isParentKeepTogether(); + } + + final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); + tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); + if (addKeepWithNext) + { + tableProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); + // A keep-with-next does not work, if the may-break-betweek rows is not set to false .. + } + } + attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); + // no need to copy the styles, this was done while deriving the + // style .. + } + else + { + // Check, whether we may be able to skip the table. + if (tableMergeActive) + { + if (detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED) + { + // Skip the whole thing .. + return; + } + else if (detailBandProcessingState == DETAIL_SECTION_WAIT) + { + if (keepWithNext) + { + final String styleName = (String) attrs.getAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME); + + final OfficeStyle style = deriveStyle(OfficeToken.TABLE, styleName); + final Element tableProps = produceFirstChild(style, OfficeNamespaces.STYLE_NS, TABLE_PROPERTIES); + // A keep-with-next does not work, if the may-break-betweek rows is not set to false .. + tableProps.setAttribute(OfficeNamespaces.STYLE_NS, MAY_BREAK_BETWEEN_ROWS, OfficeToken.FALSE); + final String hasGroupFooter = (String) attrs.getAttribute(JFreeReportInfo.REPORT_NAMESPACE, "has-group-footer"); + if (hasGroupFooter != null && hasGroupFooter.equals(OfficeToken.TRUE)) + { + tableProps.setAttribute(OfficeNamespaces.FO_NS, KEEP_WITH_NEXT, ALWAYS); + } + + attrs.setAttribute(OfficeNamespaces.TABLE_NS, OfficeToken.STYLE_NAME, style.getStyleName()); + } + detailBandProcessingState = DETAIL_SECTION_FIRST_STARTED; + } + else if (detailBandProcessingState == DETAIL_SECTION_FIRST_PRINTED) + { + detailBandProcessingState = DETAIL_SECTION_OTHER_STARTED; + } + } + + // process the styles as usual + performStyleProcessing(attrs); + } + + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + final AttributeList attrList = buildAttributeList(attrs); + xmlWriter.writeTag(namespace, elementType, attrList, XmlWriterSupport.OPEN); + } + + private boolean isParentKeepTogether() + { + PageContext context = getCurrentContext(); + if (context != null) + { + context = context.getParent(); + if (context != null) + { + return context.getKeepTogether() == PageContext.KEEP_TOGETHER_GROUP; + } + } + return false; + } + + private boolean isTableMergeActive() + { + return getCurrentRole() == ROLE_DETAIL && tableLayoutConfig == TABLE_LAYOUT_SINGLE_DETAIL_TABLE; + } + + private void openSection() + throws IOException + { + if (isRepeatingSection()) + { + // repeating sections have other ways of defining columns .. + return; + } + if (getCurrentRole() == ROLE_TEMPLATE || getCurrentRole() == ROLE_SPREADSHEET_PAGE_HEADER || getCurrentRole() == ROLE_SPREADSHEET_PAGE_FOOTER) + { + // the template section would break the multi-column stuff and we dont open up sections there + // anyway .. + return; + } + + final PageContext pageContext = getCurrentContext(); + final Integer columnCount = pageContext.getColumnCount(); + if (columnCount != null && !pageContext.isSectionOpen()) + { + final AttributeList attrs = new AttributeList(); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, OfficeToken.STYLE_NAME, generateSectionStyle(columnCount)); + attrs.setAttribute(OfficeNamespaces.TEXT_NS, NAME, sectionNames.generateName("Section")); + getXmlWriter().writeTag(OfficeNamespaces.TEXT_NS, "section", attrs, XmlWriterSupport.OPEN); + + pageContext.setSectionOpen(true); + } + + } + + protected void startReportSection(final AttributeMap attrs, final int role) + throws IOException, DataSourceException, ReportProcessingException + { + sectionHeight = new LengthCalculator(); + if (role == OfficeDocumentReportTarget.ROLE_TEMPLATE || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) + { + // Start buffering with an dummy styles-collection, so that the global styles dont get polluted .. + startBuffering(new OfficeStylesCollection(), true); + } + else if (role == OfficeDocumentReportTarget.ROLE_PAGE_HEADER) + { + startBuffering(getGlobalStylesCollection(), true); + pageHeaderOnReportHeader = PageSection.isPrintWithReportHeader(attrs); + pageHeaderOnReportFooter = PageSection.isPrintWithReportFooter(attrs); + } + else if (role == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER) + { + startBuffering(getGlobalStylesCollection(), true); + pageFooterOnReportHeader = PageSection.isPrintWithReportHeader(attrs); + pageFooterOnReportFooter = PageSection.isPrintWithReportFooter(attrs); + } + else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) + { + startBuffering(getGlobalStylesCollection(), true); + } + else if (role == OfficeDocumentReportTarget.ROLE_VARIABLES) + { + startBuffering(getGlobalStylesCollection(), false); + } + else + { + contentProcessingState = TextRawReportTarget.CP_FIRST_TABLE; + if (role == OfficeDocumentReportTarget.ROLE_GROUP_HEADER || role == OfficeDocumentReportTarget.ROLE_GROUP_FOOTER) + { + // if we have a repeating header, then skip the first one .. + // if this is a repeating footer, skip the last one. This means, + // we have to buffer all group footers and wait for the next section.. + startBuffering(getContentStylesCollection(), true); + } + + if (role != OfficeDocumentReportTarget.ROLE_DETAIL) + { + // reset the detail-state. The flag will be updated on startTable and endOther(Table) if the + // current role is ROLE_DETAIL + detailBandProcessingState = DETAIL_SECTION_WAIT; + } + } + } + + protected void startGroup(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + super.startGroup(attrs); + final PageContext pageContext = new PageContext(getCurrentContext()); + activePageContext.push(pageContext); + + final Object resetPageNumber = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "reset-page-number"); + if (OfficeToken.TRUE.equals(resetPageNumber)) + { + setPagebreakDefinition(new PageBreakDefinition(true)); + } + + final Object keepTogether = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, KEEP_TOGETHER); + if ("whole-group".equals(keepTogether)) + { + pageContext.setKeepTogether(PageContext.KEEP_TOGETHER_GROUP); + } + else if ("with-first-detail".equals(keepTogether) && pageContext.getKeepTogether() != PageContext.KEEP_TOGETHER_GROUP) + { + pageContext.setKeepTogether(PageContext.KEEP_TOGETHER_FIRST_DETAIL); + } + + final Object columnCountRaw = attrs.getAttribute(OfficeNamespaces.FO_NS, "column-count"); + final Integer colCount = parseInt(columnCountRaw); + if (colCount != null) + { + pageContext.setColumnCount(colCount); + } + + final Object newColumn = attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "start-new-column"); + if (OfficeToken.TRUE.equals(newColumn)) + { + setColumnBreakPending(true); + } + } + + protected void startGroupInstance(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + if (getGroupContext().isGroupWithRepeatingSection()) + { + setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); + } + } + + protected void endGroup(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + if (getGroupContext().isGroupWithRepeatingSection()) + { + setPagebreakDefinition(new PageBreakDefinition(isResetPageNumber())); + } + + super.endGroup(attrs); + finishSection(); + + activePageContext.pop(); + } + + private void finishSection() + throws ReportProcessingException + { + final PageContext pageContext = getCurrentContext(); + if (pageContext.isSectionOpen()) + { + pageContext.setSectionOpen(false); + try + { + getXmlWriter().writeCloseTag(); + } + catch (IOException e) + { + throw new ReportProcessingException("IOError", e); + } + } + } + + protected void endReportSection(final AttributeMap attrs, final int role) + throws IOException, DataSourceException, ReportProcessingException + { + if (role == ROLE_TEMPLATE || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_HEADER || role == OfficeDocumentReportTarget.ROLE_SPREADSHEET_PAGE_FOOTER) + { + finishBuffering(); + return; + } + + final CSSNumericValue result = sectionHeight.getResult(); + if (role == OfficeDocumentReportTarget.ROLE_PAGE_HEADER) + { + final PageContext pageContext = getCurrentContext(); + pageContext.setHeader(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); + } + else if (role == OfficeDocumentReportTarget.ROLE_PAGE_FOOTER) + { + final PageContext pageContext = getCurrentContext(); + pageContext.setFooter(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); + } + else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_HEADER) + { + final PageContext pageContext = getCurrentContext(); + pageContext.setHeader(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); + } + else if (role == OfficeDocumentReportTarget.ROLE_REPEATING_GROUP_FOOTER) + { + final PageContext pageContext = getCurrentContext(); + pageContext.setFooter(applyColumnsToPageBand(finishBuffering(), pageContext.getActiveColumns()).getXmlBuffer(), result); + } + else if (role == OfficeDocumentReportTarget.ROLE_VARIABLES) + { + if (variables == null) + { + variables = finishBuffering().getXmlBuffer(); + } + else + { + variables += finishBuffering().getXmlBuffer(); + } + } + else if (role == OfficeDocumentReportTarget.ROLE_GROUP_HEADER) + { + final String headerText = finishBuffering().getXmlBuffer(); + final int iterationCount = getGroupContext().getParent().getIterationCount(); + final boolean repeat = OfficeToken.TRUE.equals(attrs.getAttribute(OfficeNamespaces.OOREPORT_NS, "repeat-section")); + if (!repeat || iterationCount > 0) + { + getXmlWriter().writeText(headerText); + } + } + else if (role == OfficeDocumentReportTarget.ROLE_GROUP_FOOTER) + { + final String footerText = finishBuffering().getXmlBuffer(); + // how do we detect whether this is the last group footer? + getXmlWriter().writeText(footerText); + } + + } + + public void endReport(final ReportStructureRoot report) + throws DataSourceException, ReportProcessingException + { + super.endReport(report); + variablesDeclarations = null; + + try + { + // Write the settings .. + final AttributeList rootAttributes = new AttributeList(); + rootAttributes.addNamespaceDeclaration("office", OfficeNamespaces.OFFICE_NS); + rootAttributes.addNamespaceDeclaration("config", OfficeNamespaces.CONFIG); + rootAttributes.addNamespaceDeclaration("ooo", OfficeNamespaces.OO2004_NS); + rootAttributes.setAttribute(OfficeNamespaces.OFFICE_NS, "version", + OfficeDocumentReportTarget.ODF_VERSION); + final OutputStream outputStream = getOutputRepository().createOutputStream("settings.xml", "text/xml"); + final XmlWriter xmlWriter = new XmlWriter(new OutputStreamWriter(outputStream, "UTF-8"), createTagDescription()); + xmlWriter.setAlwaysAddNamespace(true); + xmlWriter.writeXmlDeclaration("UTF-8"); + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "document-settings", rootAttributes, XmlWriterSupport.OPEN); + xmlWriter.writeTag(OfficeNamespaces.OFFICE_NS, "settings", XmlWriterSupport.OPEN); + xmlWriter.writeTag(OfficeNamespaces.CONFIG, "config-item-set", NAME, "ooo:configuration-settings", XmlWriterSupport.OPEN); + + final AttributeList configAttributes = new AttributeList(); + configAttributes.setAttribute(OfficeNamespaces.CONFIG, NAME, "TableRowKeep"); + configAttributes.setAttribute(OfficeNamespaces.CONFIG, "type", "boolean"); + xmlWriter.writeTag(OfficeNamespaces.CONFIG, "config-item", configAttributes, XmlWriterSupport.OPEN); + xmlWriter.writeText(OfficeToken.TRUE); + xmlWriter.writeCloseTag(); + + xmlWriter.writeCloseTag(); + xmlWriter.writeCloseTag(); + xmlWriter.writeCloseTag(); + xmlWriter.close(); + + copyMeta(); + } + catch (IOException ioe) + { + throw new ReportProcessingException("Failed to write settings document"); + } + } + + protected void endOther(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + final String namespace = ReportTargetUtil.getNamespaceFromAttribute(attrs); + final String elementType = ReportTargetUtil.getElemenTypeFromAttribute(attrs); + + final boolean isInternalNS = ObjectUtilities.equal(JFreeReportInfo.REPORT_NAMESPACE, namespace); + final boolean isTableNs = ObjectUtilities.equal(OfficeNamespaces.TABLE_NS, namespace); + if (isTableMergeActive() && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED && isTableNs && ObjectUtilities.equal(OfficeToken.TABLE_COLUMNS, elementType)) + { + finishBuffering(); + return; + } + + if (isInternalNS && (ObjectUtilities.equal(OfficeToken.IMAGE, elementType) || ObjectUtilities.equal(OfficeToken.OBJECT_OLE, elementType))) + { + return; + } + + final XmlWriter xmlWriter = getXmlWriter(); + if (tableLayoutConfig != TABLE_LAYOUT_VARIABLES_PARAGRAPH && isTableNs && ObjectUtilities.equal(OfficeToken.TABLE_CELL, elementType) && !isRepeatingSection()) + { + if (variables != null) + { + // This cannot happen as long as the report sections only contain tables. But at some point in the + // future they will be made of paragraphs, and then we are prepared .. + //LOGGER.debug("Variables-Section " + variables); + final String tag; + if (sectionKeepTogether && expectedTableRowCount > 0) + { + tag = TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT; + } + else + { + tag = TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITHOUT_KEEPWNEXT; + } + StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, + tag, getStylesCollection(), + getGlobalStylesCollection(), getPredefinedStylesCollection()); + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, + tag, XmlWriterSupport.OPEN); + xmlWriter.writeText(variables); + xmlWriter.writeCloseTag(); + variables = null; + } + /** + // Only generate the empty paragraph, if we have to add the keep-together .. + else if (cellEmpty && expectedTableRowCount > 0 && + sectionKeepTogether && !firstCellSeen) + { + // we have no variables .. + StyleUtilities.copyStyle(OfficeToken.PARAGRAPH, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, getStylesCollection(), + getGlobalStylesCollection(), getPredefinedStylesCollection()); + xmlWriter.writeTag(OfficeNamespaces.TEXT_NS, OfficeToken.P, OfficeToken.STYLE_NAME, + TextRawReportTarget.VARIABLES_HIDDEN_STYLE_WITH_KEEPWNEXT, XmlWriterSupport.CLOSE); + } + */ + } + + if (isTableNs && (ObjectUtilities.equal(OfficeToken.TABLE_CELL, elementType) || ObjectUtilities.equal(OfficeToken.COVERED_TABLE_CELL, elementType))) + { + firstCellSeen = true; + } + if (isTableNs && ObjectUtilities.equal(OfficeToken.TABLE, elementType)) + { + if (getCurrentRole() == ROLE_DETAIL) + { + if (!isTableMergeActive()) + { + // We do not merge the detail bands, so an ordinary close will do. + xmlWriter.writeCloseTag(); + } + else if (detailBandProcessingState == DETAIL_SECTION_FIRST_STARTED) + { + final int keepTogetherState = getCurrentContext().getKeepTogether(); + if (keepTogetherState == PageContext.KEEP_TOGETHER_FIRST_DETAIL) + { + xmlWriter.writeCloseTag(); + detailBandProcessingState = DETAIL_SECTION_FIRST_PRINTED; + } + else + { + detailBandProcessingState = DETAIL_SECTION_OTHER_PRINTED; + } + } + else if (detailBandProcessingState == DETAIL_SECTION_OTHER_STARTED) + { + detailBandProcessingState = DETAIL_SECTION_OTHER_PRINTED; + } + } + else + { + xmlWriter.writeCloseTag(); + } + if (isSectionPagebreakAfter(attrs)) + { + setPagebreakDefinition(new PageBreakDefinition(false)); + } + } + else + { + xmlWriter.writeCloseTag(); + } + } + + protected void endGroupBody(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + if (tableLayoutConfig == TABLE_LAYOUT_SINGLE_DETAIL_TABLE && detailBandProcessingState == DETAIL_SECTION_OTHER_PRINTED) + { + // closes the table .. + final XmlWriter xmlWriter = getXmlWriter(); + xmlWriter.writeCloseTag(); + detailBandProcessingState = DETAIL_SECTION_WAIT; + } + + } + + protected void endContent(final AttributeMap attrs) + throws IOException, DataSourceException, ReportProcessingException + { + finishSection(); + final BufferState bodyText = finishBuffering(); + final XmlWriter writer = getXmlWriter(); + + final Map definedMappings = variablesDeclarations.getDefinedMappings(); + if (!definedMappings.isEmpty()) + { + writer.writeTag(OfficeNamespaces.TEXT_NS, "variable-decls", XmlWriterSupport.OPEN); + final Iterator mappingsIt = definedMappings.entrySet().iterator(); + while (mappingsIt.hasNext()) + { + final Map.Entry entry = (Map.Entry) mappingsIt.next(); + final AttributeList entryList = new AttributeList(); + entryList.setAttribute(OfficeNamespaces.TEXT_NS, NAME, (String) entry.getKey()); + entryList.setAttribute(OfficeNamespaces.OFFICE_NS, FormatValueUtility.VALUE_TYPE, (String) entry.getValue()); + writer.writeTag(OfficeNamespaces.TEXT_NS, "variable-decl", entryList, XmlWriterSupport.CLOSE); + } + writer.writeCloseTag(); + } + + writer.writeStream(bodyText.getXmlAsReader()); + writer.setLineEmpty(true); + writer.writeCloseTag(); + } + + public String getExportDescriptor() + { + return "raw/" + PentahoReportEngineMetaData.OPENDOCUMENT_TEXT; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/output/text/VariablesDeclarations.java b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/VariablesDeclarations.java new file mode 100644 index 000000000000..05fe8911b880 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/output/text/VariablesDeclarations.java @@ -0,0 +1,98 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.output.text; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.jfree.report.util.AttributeNameGenerator; + + +/** + * A collection that holds all used variables. A variable is primarily keyed by + * its original name. If a variable contains more than one type, it is also + * keyed by the type. + * + * @since 26.03.2007 + */ +public class VariablesDeclarations +{ + + private final AttributeNameGenerator nameGenerator; + private final Map > variables; + + public VariablesDeclarations() + { + variables = new HashMap >(); + nameGenerator = new AttributeNameGenerator(); + } + + public String produceVariable(final String name, + final String type) + { + HashMap holder = variables.get(name); + if (holder == null) + { + holder = new HashMap(); + variables.put(name, holder); + } + + final String mapping = holder.get(type); + if (mapping != null) + { + return mapping; + } + final String result = nameGenerator.generateName(name); + if (holder.isEmpty()) + { + // create the default mapping as well.. + holder.put(null, name); + holder.put("time", name); + holder.put("date", name); + holder.put("datetime", name); + holder.put("float", name); + holder.put("string", name); + holder.put("boolean", name); + } + holder.put(type, name); + return result; + } + + public Map getDefinedMappings() + { + final HashMap mappings = new HashMap(); + final Iterator> vars = variables.values().iterator(); + while (vars.hasNext()) + { + final HashMap types = vars.next(); + final Iterator> varsByType = types.entrySet().iterator(); + while (varsByType.hasNext()) + { + final Map.Entry entry = varsByType.next(); + final String type = entry.getKey(); + if (type != null) + { + final String varName = entry.getValue(); + mappings.put(varName, type); + } + } + } + return mappings; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/AttributeSpecification.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/AttributeSpecification.java new file mode 100644 index 000000000000..937f7a40591c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/AttributeSpecification.java @@ -0,0 +1,48 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +public final class AttributeSpecification +{ + + private final String namespaceUrl; + private final String attributName; + private final String mapperImplementation; + + public AttributeSpecification(String namespaceUrl, String attributName, String mapperImplementation) + { + this.namespaceUrl = namespaceUrl; + this.attributName = attributName; + this.mapperImplementation = mapperImplementation; + } + + public String getAttributName() + { + return attributName; + } + + public String getMapperImplementation() + { + return mapperImplementation; + } + + public String getNamespaceUrl() + { + return namespaceUrl; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/ElementReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/ElementReadHandler.java new file mode 100644 index 000000000000..c311f45d1390 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/ElementReadHandler.java @@ -0,0 +1,81 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Creation-Date: 03.07.2006, 14:22:34 + * + */ +public abstract class ElementReadHandler extends AbstractXmlReadHandler +{ + + public ElementReadHandler() + { + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + final Element element = getElement(); + copyElementType(element); + copyAttributes(attrs, element); + } + + protected void copyElementType(final Element element) + { + element.setType(getTagName()); + element.setNamespace(getUri()); + } + + protected void copyAttributes(final Attributes attrs, final Element element) + { + final int length = attrs.getLength(); + for (int i = 0; i < length; i++) + { + final String value = attrs.getValue(i); + final String namespace = attrs.getURI(i); + final String attr = attrs.getLocalName(i); + element.setAttribute(namespace, attr, value); + } + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() throws SAXException + { + return getElement(); + } + + public abstract Element getElement(); +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java new file mode 100644 index 000000000000..edcb56cb9f71 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java @@ -0,0 +1,41 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.libreoffice.report.pentaho.model.OfficeDocument; + +import org.jfree.report.modules.factories.report.base.JFreeReportXmlResourceFactory; + +/** + * A LibLoader resource factory for OfficeDocument objects. OfficeDocuments are + * JFreeReport instances which have some additional properties. + * + * @since 09.03.2007 + */ +public class OfficeDocumentXmlResourceFactory extends JFreeReportXmlResourceFactory +{ + + public OfficeDocumentXmlResourceFactory() + { + } + + public Class getFactoryType() + { + return OfficeDocument.class; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeParserUtil.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeParserUtil.java new file mode 100644 index 000000000000..9cc91f22b6d3 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeParserUtil.java @@ -0,0 +1,182 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.layouting.namespace.NamespaceDefinition; +import org.jfree.layouting.namespace.Namespaces; +import org.jfree.report.JFreeReportBoot; + +import org.pentaho.reporting.libraries.base.config.DefaultConfiguration; +import org.pentaho.reporting.libraries.resourceloader.Resource; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + + +public class OfficeParserUtil +{ + + private static final Log LOGGER = LogFactory.getLog(OfficeParserUtil.class); + private static OfficeParserUtil instance; + private static final String NAMESPACES_PREFIX = "namespaces."; + + public static synchronized OfficeParserUtil getInstance() + { + if (instance == null) + { + instance = new OfficeParserUtil(); + } + return instance; + } + private final DefaultConfiguration props; + private final NamespaceDefinition[] namespaces; + + private OfficeParserUtil() + { + props = new DefaultConfiguration(); + + final ResourceManager resourceManager = new ResourceManager(); + resourceManager.registerDefaults(); + try + { + final Resource res = resourceManager.createDirectly("res://org/libreoffice/report/pentaho/parser/selectors.properties", Properties.class); + final Properties resProps = (Properties) res.getResource(); + props.putAll(resProps); + } + catch (ResourceException e) + { + LOGGER.warn("Unable to load mapping rules. Parsing services may not be available.", e); + } + + namespaces = Namespaces.createFromConfig(JFreeReportBoot.getInstance().getGlobalConfig(), + "org.jfree.report.namespaces.", resourceManager); + } + + public NamespaceDefinition getNamespaceDeclaration(final String uri) + { + if (uri == null) + { + throw new NullPointerException("URI must not be null"); + } + + for (int i = 0; i < namespaces.length; i++) + { + final NamespaceDefinition definition = namespaces[i]; + if (uri.equals(definition.getURI())) + { + return definition; + } + } + return null; + } + + public String getGenericFont(final String officeFont) + { + return props.getProperty("font-family." + officeFont.toLowerCase(), officeFont); + } + + public String getNamespaceURI(final String namespacePrefix) + { + return props.getProperty(NAMESPACES_PREFIX + namespacePrefix); + } + + public String getNamespaceForStyleFamily(final String styleFamily) + { + return props.getProperty("style-family." + styleFamily); + } + + public Map getNamespaces() + { + final Map map = new HashMap(); + final Iterator keys = props.findPropertyKeys(NAMESPACES_PREFIX); + while (keys.hasNext()) + { + final String key = (String) keys.next(); + final String value = props.getConfigProperty(key); + map.put(key.substring(NAMESPACES_PREFIX.length()), value); + } + return map; + } + + public String getNamespacePrefix(final String namespaceURI) + { + final Iterator keys = props.findPropertyKeys(NAMESPACES_PREFIX); + while (keys.hasNext()) + { + final String key = (String) keys.next(); + final String value = props.getConfigProperty(key); + if (namespaceURI.equals(value)) + { + return key.substring(NAMESPACES_PREFIX.length()); + } + } + return null; + } + + public AttributeSpecification parseStyleAttrDefinition(final String key, final String prefix, final String tagname) + { + final String configPrefix = "attr." + prefix + "." + tagname + "."; + final String configSuffix = key.substring(configPrefix.length()); + final int dotPosition = configSuffix.indexOf('.'); + if (dotPosition == -1) + { + return null; + } + final String namespaceUri = getNamespaceURI(configSuffix.substring(0, dotPosition)); + final String attrName = configSuffix.substring(dotPosition + 1); + final String value = props.getProperty(key); + return new AttributeSpecification(namespaceUri, attrName, value); + } + + public Iterator findStylesForElement(final String prefix, + final String tagname) + { + final String configPrefix = "attr." + prefix + "." + tagname + "."; + return props.findPropertyKeys(configPrefix); + } + + public boolean isValidStyleElement(final String uri, final String tagName) + { + final String prefix = getNamespacePrefix(uri); + if (prefix == null) + { + return false; + } + + final Iterator stylesForElement = findStylesForElement(prefix, tagName); + return stylesForElement.hasNext(); + } + + public String getSelectorPattern() + { + return props.getConfigProperty("style-selector.pattern"); + } + + public static void main(final String[] args) + { + JFreeReportBoot.getInstance().start(); + System.out.print(OfficeParserUtil.getInstance().getNamespaces()); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeStylesXmlResourceFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeStylesXmlResourceFactory.java new file mode 100644 index 000000000000..18267f21382f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/OfficeStylesXmlResourceFactory.java @@ -0,0 +1,49 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; + +import org.jfree.report.JFreeReportBoot; + +import org.pentaho.reporting.libraries.base.config.Configuration; +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlResourceFactory; + +/** + * A LibLoader resource factory for loading an OfficeStyles-collection. This + * implementation is meant to parse the 'styles.xml' file. + * + * @since 09.03.2007 + */ +public class OfficeStylesXmlResourceFactory extends AbstractXmlResourceFactory +{ + + public OfficeStylesXmlResourceFactory() + { + } + + protected Configuration getConfiguration() + { + return JFreeReportBoot.getInstance().getGlobalConfig(); + } + + public Class getFactoryType() + { + return OfficeStylesCollection.class; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarStyleXmlFactoryModule.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarStyleXmlFactoryModule.java new file mode 100644 index 000000000000..bf793e1d8acf --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarStyleXmlFactoryModule.java @@ -0,0 +1,53 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.office.DocumentStylesReadHandler; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; +import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +public class StarStyleXmlFactoryModule implements XmlFactoryModule +{ + + public StarStyleXmlFactoryModule() + { + } + + public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) + { + return new DocumentStylesReadHandler(); + } + + public int getDocumentSupport(final XmlDocumentInfo documentInfo) + { + final String rootNamespace = documentInfo.getRootElementNameSpace(); + if (OfficeNamespaces.OFFICE_NS.equals(rootNamespace) && "document-styles".equals(documentInfo.getRootElement())) + { + return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; + } + return XmlFactoryModule.NOT_RECOGNIZED; + } + + public String getDefaultNamespace(final XmlDocumentInfo documentInfo) + { + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarXmlFactoryModule.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarXmlFactoryModule.java new file mode 100644 index 000000000000..78f0633f0956 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StarXmlFactoryModule.java @@ -0,0 +1,53 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.office.DocumentContentReadHandler; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; +import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +public class StarXmlFactoryModule implements XmlFactoryModule +{ + + public StarXmlFactoryModule() + { + } + + public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) + { + return new DocumentContentReadHandler(); + } + + public int getDocumentSupport(final XmlDocumentInfo documentInfo) + { + final String rootNamespace = documentInfo.getRootElementNameSpace(); + if (OfficeNamespaces.OFFICE_NS.equals(rootNamespace) && ("document-content".equals(documentInfo.getRootElement()) || "document".equals(documentInfo.getRootElement()))) + { + return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; + } + return XmlFactoryModule.NOT_RECOGNIZED; + } + + public String getDefaultNamespace(final XmlDocumentInfo documentInfo) + { + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/StyleMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StyleMapper.java new file mode 100644 index 000000000000..a248ce5a4ce1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/StyleMapper.java @@ -0,0 +1,29 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser; + +import org.jfree.layouting.input.style.CSSDeclarationRule; + +public interface StyleMapper +{ + + void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule); +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/chart/ChartReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/chart/ChartReadHandler.java new file mode 100644 index 000000000000..a7a6e55ceb31 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/chart/ChartReadHandler.java @@ -0,0 +1,99 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.chart; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.DetailRootTableReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.ReportReadHandler; +import org.libreoffice.report.pentaho.parser.text.TextContentReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +public class ChartReadHandler extends ElementReadHandler +{ + + private final Section element; + private final List children; + private final ReportReadHandler reportHandler; + + public ChartReadHandler(ReportReadHandler reportHandler) + { + this.reportHandler = reportHandler; + children = new ArrayList(); + element = new Section(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if ("detail".equals(tagName)) + { + final DetailRootTableReadHandler detail = new DetailRootTableReadHandler(); + reportHandler.setDetail(detail); + return detail; + } + else if ("p".equals(tagName) && OfficeNamespaces.TEXT_NS.equals(uri)) + { + final TextContentReadHandler readHandler = new TextContentReadHandler(); + children.add(readHandler); + return readHandler; + } + final ChartReadHandler erh = new ChartReadHandler(reportHandler); + children.add(erh); + return erh; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (ElementReadHandler handler : children) + { + element.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/data/DataStyleReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/data/DataStyleReadHandler.java new file mode 100644 index 000000000000..693ed0173b79 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/data/DataStyleReadHandler.java @@ -0,0 +1,121 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.data; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.DataStyle; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.StaticText; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +public class DataStyleReadHandler extends ElementReadHandler +{ + + private final DataStyle dataStyle; + private final List children; + private final boolean hasCData; + + public DataStyleReadHandler(final boolean hasCData) + { + this.hasCData = hasCData; + this.dataStyle = new DataStyle(); + this.children = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.DATASTYLE_NS.equals(uri) || OfficeNamespaces.STYLE_NS.equals(uri)) + { + final DataStyleReadHandler xrh = new DataStyleReadHandler("text".equals(tagName) || "currency-symbol".equals(tagName) || "embedded-text".equals(tagName)); + children.add(xrh); + return xrh; + } + + return null; + } + + /** + * This method is called to process the character data between element tags. + * + * @param ch the character buffer. + * @param start the start index. + * @param length the length. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + public void characters(final char[] ch, final int start, final int length) + throws SAXException + { + if (hasCData) + { + children.add(new StaticText(new String(ch, start, length))); + } + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final Object o = children.get(i); + if (o instanceof ElementReadHandler) + { + final ElementReadHandler handler = (ElementReadHandler) o; + dataStyle.addNode(handler.getElement()); + } + else if (o instanceof StaticText) + { + dataStyle.addNode((StaticText) o); + } + } + } + + public DataStyle getDataStyle() + { + return dataStyle; + } + + public Element getElement() + { + return dataStyle; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/draw/ObjectOleReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/draw/ObjectOleReadHandler.java new file mode 100644 index 000000000000..291490752619 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/draw/ObjectOleReadHandler.java @@ -0,0 +1,75 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.draw; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ObjectOleElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * + */ +public class ObjectOleReadHandler extends ElementReadHandler +{ + + private final static String RPT_CHART_CLASS_ID = "80243D39-6741-46C5-926E-069164FF87BB"; + private final static String OOO_CHART_CLASS_ID = "12DCAE26-281F-416F-A234-C3086127382E"; + private final ObjectOleElement element; + + public ObjectOleReadHandler(final ObjectOleElement element) + { + this.element = element; + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + + final String url = attrs.getValue(OfficeNamespaces.XLINK_NS, "href"); + if (url != null) + { + element.setUrl(url); + } + + String classid = attrs.getValue(OfficeNamespaces.DRAWING_NS, "class-id"); + if (classid != null) + { + if (classid.equalsIgnoreCase(RPT_CHART_CLASS_ID)) + { + classid = OOO_CHART_CLASS_ID; + } + element.setClassId(classid); + } + } + + public Element getElement() + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/BodyReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/BodyReadHandler.java new file mode 100644 index 000000000000..0baecda6261d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/BodyReadHandler.java @@ -0,0 +1,82 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.office; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.ReportReadHandler; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class BodyReadHandler extends ElementReadHandler +{ + + private ElementReadHandler reportReadHandler; + private final Section body; + + public BodyReadHandler() + { + body = new Section(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OFFICE_NS.equals(uri) && "report".equals(tagName)) + { + reportReadHandler = new ReportReadHandler(); + return reportReadHandler; + } + + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + if (reportReadHandler != null) + { + body.addNode(reportReadHandler.getElement()); + } + } + + public Element getElement() + { + return body; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentContentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentContentReadHandler.java new file mode 100644 index 000000000000..6557227f8dd7 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentContentReadHandler.java @@ -0,0 +1,227 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.office; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeDocument; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.parser.style.OfficeStylesReadHandler; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.jfree.report.JFreeReport; + +import org.pentaho.reporting.libraries.resourceloader.Resource; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceKey; +import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * This is the root handler for the document context. The + * 'office:document-context' element is encountered, if the document is split + * into separate files. + *

+ * Alternativly, there is the option to keep everything in one file. The root + * element for that format is 'office:document'. + */ +public class DocumentContentReadHandler extends AbstractXmlReadHandler +{ + + private static final Log LOGGER = LogFactory.getLog(DocumentContentReadHandler.class); + private OfficeDocument report; + private FontFaceDeclsReadHandler fontFaceReadHandler; + private BodyReadHandler bodyReadHandler; + private OfficeStylesCollection officeStylesCollection; + + public DocumentContentReadHandler() + { + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) + throws SAXException + { + super.startParsing(attrs); + // parse the external 'styles.xml' if it exists + // parse the external 'meta.xml' if it exists + // parse the external 'settings.xml' if it exists + this.report = parseContentXml(); + this.report.setVirtual(true); + this.report.setType("document-content"); + this.report.setNamespace(OfficeNamespaces.OFFICE_NS); + this.report.setVirtual(true); + this.officeStylesCollection = parseStylesXml(); + } + + private OfficeStylesCollection parseStylesXml() + { + final ResourceKey contextKey = getRootHandler().getContext(); + final ResourceManager resourceManager = getRootHandler().getResourceManager(); + + try + { + final ResourceKey key = + resourceManager.deriveKey(contextKey, "styles.xml"); + final Resource resource = + resourceManager.create(key, contextKey, OfficeStylesCollection.class); + final OfficeStylesCollection styles = + (OfficeStylesCollection) resource.getResource(); + if (styles != null) + { + return styles; + } + } + catch (ResourceKeyCreationException e) + { + // ignore .. + LOGGER.debug("Failed to create resource-key for 'styles.xml'. Ignoring.", e); + } + catch (ResourceException e) + { + // ignore .. + LOGGER.debug("Failed to parse resource for 'styles.xml'. Ignoring.", e); + } + + return new OfficeStylesCollection(); + } + + private OfficeDocument parseContentXml() + { + // Check whether this is a content.xml. + if (!OfficeNamespaces.OFFICE_NS.equals(getUri()) || "document-content".equals(getTagName())) + { + return new OfficeDocument(); + } + + // we may have to parse an existing content.xml. + final ResourceKey contextKey = getRootHandler().getContext(); + final ResourceManager resourceManager = getRootHandler().getResourceManager(); + try + { + final ResourceKey key = + resourceManager.deriveKey(contextKey, "content.xml"); + final Resource resource = + resourceManager.create(key, contextKey, JFreeReport.class); + final OfficeDocument doc = (OfficeDocument) resource.getResource(); + if (doc != null) + { + return doc; + } + } + catch (ResourceKeyCreationException e) + { + // ignore .. + LOGGER.debug("Failed to create resource-key for 'content.xml'. Ignoring."); + } + catch (ResourceException e) + { + // ignore .. + LOGGER.debug("Failed to parse resource for 'content.xml'. Ignoring."); + } + return new OfficeDocument(); + + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OFFICE_NS.equals(uri)) + { + if ("font-face-decls".equals(tagName)) + { + if (fontFaceReadHandler == null) + { + fontFaceReadHandler = new FontFaceDeclsReadHandler(officeStylesCollection.getFontFaceDecls()); + } + return fontFaceReadHandler; + } + else if ("automatic-styles".equals(tagName)) + { + return new OfficeStylesReadHandler(officeStylesCollection.getAutomaticStyles()); + } + else if ("styles".equals(tagName)) + { + return new OfficeStylesReadHandler(officeStylesCollection.getCommonStyles()); + } + else if ("master-styles".equals(tagName)) + { + return new MasterStylesReadHandler(officeStylesCollection.getMasterStyles()); + } + else if ("body".equals(tagName)) + { + bodyReadHandler = new BodyReadHandler(); + return bodyReadHandler; + } + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + // The office-document is the only node of the report. It allows us to + // switch the layout-processing implementation later on. + + report.setStylesCollection(officeStylesCollection); + + if (bodyReadHandler != null) + { + report.addNode(bodyReadHandler.getElement()); + } + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() + throws SAXException + { + return report; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentStylesReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentStylesReadHandler.java new file mode 100644 index 000000000000..958fd896d9ba --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/DocumentStylesReadHandler.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.office; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeStylesCollection; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.style.OfficeStylesReadHandler; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * The root parser for a 'styles.xml' document. This generates the global + * (or common) style collection. These styles contain the named common styles + * and the page layouts. + * + * @since 08.03.2007 + */ +public class DocumentStylesReadHandler extends ElementReadHandler +{ + + private final OfficeStylesCollection officeStylesCollection; + private FontFaceDeclsReadHandler fontFaceReadHandler; + + public DocumentStylesReadHandler() + { + officeStylesCollection = new OfficeStylesCollection(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (!OfficeNamespaces.OFFICE_NS.equals(uri)) + { + return null; + } + + if ("font-face-decls".equals(tagName)) + { + if (fontFaceReadHandler == null) + { + fontFaceReadHandler = new FontFaceDeclsReadHandler(officeStylesCollection.getFontFaceDecls()); + } + return fontFaceReadHandler; + } + else if ("automatic-styles".equals(tagName)) + { + return new OfficeStylesReadHandler(officeStylesCollection.getAutomaticStyles()); + } + else if ("styles".equals(tagName)) + { + return new OfficeStylesReadHandler(officeStylesCollection.getCommonStyles()); + } + else if ("master-styles".equals(tagName)) + { + return new MasterStylesReadHandler(officeStylesCollection.getMasterStyles()); + } + return null; + } + + public Element getElement() + { + return officeStylesCollection; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/FontFaceDeclsReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/FontFaceDeclsReadHandler.java new file mode 100644 index 000000000000..de13cf10a53a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/FontFaceDeclsReadHandler.java @@ -0,0 +1,107 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.office; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FontFaceDeclsSection; +import org.libreoffice.report.pentaho.model.FontFaceElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.style.FontFaceReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Reads the font-face declarations section. This one can only contain + * font-face elements. + * + * @since 13.03.2007 + */ +public class FontFaceDeclsReadHandler extends ElementReadHandler +{ + + private final FontFaceDeclsSection fontFaceDecls; + private final List fontFaceReadHandlers; + + public FontFaceDeclsReadHandler(final FontFaceDeclsSection fontFaceDecls) + { + this.fontFaceDecls = fontFaceDecls; + this.fontFaceReadHandlers = new ArrayList(); + } + + public FontFaceDeclsSection getFontFaceDecls() + { + return fontFaceDecls; + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (!OfficeNamespaces.STYLE_NS.equals(uri)) + { + return null; + } + + if ("font-face".equals(tagName)) + { + final FontFaceReadHandler frh = new FontFaceReadHandler(); + fontFaceReadHandlers.add(frh); + return frh; + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + for (int i = 0; i < fontFaceReadHandlers.size(); i++) + { + final FontFaceReadHandler handler = fontFaceReadHandlers.get(i); + fontFaceDecls.addFontFace((FontFaceElement) handler.getElement()); + } + } + + public Element getElement() + { + return fontFaceDecls; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/MasterStylesReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/MasterStylesReadHandler.java new file mode 100644 index 000000000000..0b2b25430090 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/office/MasterStylesReadHandler.java @@ -0,0 +1,113 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.office; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeMasterStyles; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.style.MasterPageReadHandler; +import org.libreoffice.report.pentaho.parser.style.StyleDefinitionReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Todo: Document me! + * + * @since 13.03.2007 + */ +public class MasterStylesReadHandler extends ElementReadHandler +{ + + private final OfficeMasterStyles masterStyles; + private final List otherHandlers; + private final List masterPageHandlers; + + public MasterStylesReadHandler(final OfficeMasterStyles masterStyles) + { + this.masterStyles = masterStyles; + this.masterPageHandlers = new ArrayList(); + this.otherHandlers = new ArrayList(); + } + + public OfficeMasterStyles getMasterStyles() + { + return masterStyles; + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.STYLE_NS.equals(uri) && "master-page".equals(tagName)) + { + final MasterPageReadHandler mrh = new MasterPageReadHandler(); + masterPageHandlers.add(mrh); + return mrh; + } + + final StyleDefinitionReadHandler readHandler = + new StyleDefinitionReadHandler(); + otherHandlers.add(readHandler); + return readHandler; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + for (int i = 0; i < otherHandlers.size(); i++) + { + final ElementReadHandler handler = otherHandlers.get(i); + masterStyles.getOtherNodes().addNode(handler.getElement()); + } + + for (int i = 0; i < masterPageHandlers.size(); i++) + { + final MasterPageReadHandler handler = masterPageHandlers.get(i); + masterStyles.addMasterPage(handler.getMasterPage()); + } + } + + public Element getElement() + { + return masterStyles; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt-schema-v1.0-os.xsd b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt-schema-v1.0-os.xsd new file mode 100644 index 000000000000..4c296ac7a75f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt-schema-v1.0-os.xsd @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java new file mode 100644 index 000000000000..a15f1610e770 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java @@ -0,0 +1,71 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.expressions.FormulaFunction; +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Handles the 'report:conditional-print-expression' element that can appear + * in all report elements and all root-level sections. + * + * @since 02.03.2007 + */ +public class ConditionalPrintExpressionReadHandler + extends AbstractXmlReadHandler +{ + + private final Element element; + + public ConditionalPrintExpressionReadHandler(final Element element) + { + this.element = element; + } + + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); + if (formula != null) + { + final FormulaFunction valueExpression = new FormulaFunction(); + valueExpression.setFormula(formula); + element.setDisplayCondition(valueExpression); + } + + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() + throws SAXException + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/DetailRootTableReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/DetailRootTableReadHandler.java new file mode 100644 index 000000000000..2a0677065ecc --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/DetailRootTableReadHandler.java @@ -0,0 +1,29 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.model.OfficeDetailSection; + +public class DetailRootTableReadHandler extends RootTableReadHandler +{ + + public DetailRootTableReadHandler() + { + super(new OfficeDetailSection()); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FixedContentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FixedContentReadHandler.java new file mode 100644 index 000000000000..ab0fc52b1fee --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FixedContentReadHandler.java @@ -0,0 +1,88 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FixedTextElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.text.TextContentReadHandler; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Creation-Date: 01.10.2006, 18:48:11 + * + */ +public class FixedContentReadHandler extends ElementReadHandler +{ + + private final FixedTextElement element; + + public FixedContentReadHandler() + { + element = new FixedTextElement(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.TEXT_NS.equals(uri) && OfficeToken.P.equals(tagName)) + { + // expect a paragraph (which will be ignored; it is a structural + // component that needs not to be printed at all. + return new TextContentReadHandler(element.getContent()); + } + + if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + // expect a report control. The control will modifiy the current + // element (as we do not separate the elements that strictly ..) + if ("report-control".equals(tagName)) + { + return new IgnoreAnyChildReadHandler(); + } + if ("report-element".equals(tagName)) + { + return new ReportElementReadHandler(element); + } + } + return null; + } + + public Element getElement() + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormatConditionReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormatConditionReadHandler.java new file mode 100644 index 000000000000..cb3fa0a96039 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormatConditionReadHandler.java @@ -0,0 +1,90 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormatCondition; +import org.libreoffice.report.pentaho.model.ReportElement; + +import org.jfree.report.expressions.FormulaExpression; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.ParseException; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * I'm quite sure I should parse something here. But what? + * + */ +public class FormatConditionReadHandler extends AbstractXmlReadHandler +{ + + private final ReportElement element; + + public FormatConditionReadHandler(final ReportElement element) + { + if (element == null) + { + throw new NullPointerException(); + } + this.element = element; + } + + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + + + final String formula = + attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); + if (formula == null) + { + throw new ParseException("Required attribute 'formula' is missing.", getLocator()); + } + final String stylename = + attrs.getValue(OfficeNamespaces.OOREPORT_NS, OfficeToken.STYLE_NAME); + if (stylename == null) + { + throw new ParseException("Required attribute 'style-name' is missing.", getLocator()); + } + final FormulaExpression valueExpression = new FormulaExpression(); + valueExpression.setFormula(formula); + + final String enabledText = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "enabled"); + final boolean enabled = (enabledText == null || OfficeToken.TRUE.equals(enabledText)); + final FormatCondition formatCondition = + new FormatCondition(valueExpression, stylename, enabled); + element.addFormatCondition(formatCondition); + + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() + throws SAXException + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormattedTextReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormattedTextReadHandler.java new file mode 100644 index 000000000000..a1408d20dd52 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FormattedTextReadHandler.java @@ -0,0 +1,108 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.FormattedTextElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Creation-Date: 01.10.2006, 19:06:45 + * + */ +public class FormattedTextReadHandler extends ElementReadHandler +{ + + private final FormattedTextElement element; + + public FormattedTextReadHandler() + { + element = new FormattedTextElement(); + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + + final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); + if (formula != null) + { + final FormulaExpression valueExpression = new FormulaExpression(); + valueExpression.setFormula(formula); + element.setValueExpression(valueExpression); + } + + // * Print-Repeated-Values + // * Print-In-First-New-Section + // * Print-When-Group-Change + + // * Print-When-Section-Overflows + // That property cannot be evaluated yet, as this would require us to + // have a clue about pagebreaking. We dont have that - not yet and never + // in the future, as pagebreaks are computed by OpenOffice instead + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + // expect a report control. The control will modifiy the current + // element (as we do not separate the elements that strictly ..) + if ("report-control".equals(tagName)) + { + return new IgnoreAnyChildReadHandler(); + } + if ("report-element".equals(tagName)) + { + return new ReportElementReadHandler(element); + } + } + return null; + } + + public Element getElement() + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FunctionReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FunctionReadHandler.java new file mode 100644 index 000000000000..b1352d20c909 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/FunctionReadHandler.java @@ -0,0 +1,106 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.jfree.report.expressions.Expression; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.expressions.FormulaFunction; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.ParseException; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Parses a named expression. These expressions are encountered on reports and + * groups and compute global values. Expressions must have an unique name. + * + */ +public class FunctionReadHandler extends AbstractXmlReadHandler +{ + + private Expression expression; + + public FunctionReadHandler() + { + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) + throws SAXException + { + final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); + if (formula == null) + { + throw new ParseException("Required attribute 'formula' is missing", getLocator()); + } + + final String name = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "name"); + if (name == null) + { + throw new ParseException("Required attribute 'name' is missing", getLocator()); + } + final String initialFormula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "initial-formula"); + final String deepTraversing = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "deep-traversing"); + + if (initialFormula != null) + { + final FormulaFunction function = new FormulaFunction(); + function.setInitial(initialFormula); + function.setFormula(formula); + this.expression = function; + } + else + { + final FormulaExpression expression = new FormulaExpression(); + expression.setFormula(formula); + this.expression = expression; + } + + expression.setName(name); + expression.setDeepTraversing(OfficeToken.TRUE.equals(deepTraversing)); + final String preEvaluated = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "pre-evaluated"); + expression.setPrecompute(OfficeToken.TRUE.equals(preEvaluated)); + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() + throws SAXException + { + return getExpression(); + } + + public Expression getExpression() + { + return expression; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupReadHandler.java new file mode 100644 index 000000000000..22def36e179b --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupReadHandler.java @@ -0,0 +1,172 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeGroup; +import org.libreoffice.report.pentaho.model.OfficeGroupInstanceSection; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +public class GroupReadHandler extends ElementReadHandler +{ + + private GroupSectionReadHandler groupHeader; + private GroupSectionReadHandler groupFooter; + private GroupReadHandler childGroup; + private RootTableReadHandler detailSection; + private final OfficeGroup group; + private final OfficeGroupInstanceSection groupInstanceSection; + private final List functionHandlers; + private final ReportReadHandler rh; + + public GroupReadHandler(final ReportReadHandler _rh) + { + rh = _rh; + group = new OfficeGroup(); + groupInstanceSection = new OfficeGroupInstanceSection(); + groupInstanceSection.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + groupInstanceSection.setType("group-instance"); + group.addNode(groupInstanceSection); + functionHandlers = new ArrayList(); + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + + final String groupExpr = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "group-expression"); + if (groupExpr != null && !"".equals(groupExpr)) + { + final FormulaExpression function = new FormulaExpression(); + function.setFormula(groupExpr); + groupInstanceSection.setGroupingExpression(function); + } + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (!OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + return null; + } + if ("function".equals(tagName)) + { + final FunctionReadHandler erh = new FunctionReadHandler(); + functionHandlers.add(erh); + return erh; + } + if ("group-header".equals(tagName)) + { + groupHeader = new GroupSectionReadHandler(); + return groupHeader; + } + if ("group".equals(tagName)) + { + childGroup = new GroupReadHandler(rh); + return childGroup; + } + if ("detail".equals(tagName)) + { + detailSection = new DetailRootTableReadHandler(); + rh.setDetail(detailSection); + return detailSection; + } + if ("group-footer".equals(tagName)) + { + ((Element) ((Section) rh.getDetail().getElement()).getNode(0)).setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "has-group-footer", OfficeToken.TRUE); + groupFooter = new GroupSectionReadHandler(); + return groupFooter; + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < functionHandlers.size(); i++) + { + final FunctionReadHandler handler = functionHandlers.get(i); + groupInstanceSection.addExpression(handler.getExpression()); + } + + if (groupHeader != null) + { + groupInstanceSection.addNode(groupHeader.getElement()); + } + + final Section groupBody = new Section(); + groupBody.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + groupBody.setType("group-body"); + groupInstanceSection.addNode(groupBody); + // XOR: Either the detail or the group section can be set .. + if (detailSection != null) + { + groupBody.addNode(detailSection.getElement()); + } + else if (childGroup != null) + { + groupBody.addNode(childGroup.getElement()); + } + + if (groupFooter != null) + { + groupInstanceSection.addNode(groupFooter.getElement()); + } + } + + public Element getElement() + { + return group; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupSectionReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupSectionReadHandler.java new file mode 100644 index 000000000000..461cf67840f0 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/GroupSectionReadHandler.java @@ -0,0 +1,29 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.model.OfficeGroupSection; + +public class GroupSectionReadHandler extends RootTableReadHandler +{ + + public GroupSectionReadHandler() + { + super(new OfficeGroupSection()); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ImageReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ImageReadHandler.java new file mode 100644 index 000000000000..39f0d82326e6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ImageReadHandler.java @@ -0,0 +1,131 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ImageElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.xlink.XLinkReadHandler; + +import org.jfree.report.expressions.FormulaExpression; +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Deals with Image-content. There are two ways to specify the image; + * as formula or as static image data. + * + */ +public class ImageReadHandler extends ElementReadHandler +{ + + private final ImageElement contentElement; + private XLinkReadHandler xLinkReadHandler; + + public ImageReadHandler() + { + contentElement = new ImageElement(); + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + final String formula = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "formula"); +// final String preserveIRI = attrs.getValue(OfficeNamespaces.OOREPORT_NS, OfficeToken.PRESERVE_IRI); + if (formula != null && formula.length() != 0) + { + // now, the evaulated content ends up in the 'content' attribute of the + // element. + final FormulaExpression valueExpression = new FormulaExpression(); + valueExpression.setFormula(formula); + contentElement.setFormula(valueExpression); + } + + contentElement.setNamespace(OfficeNamespaces.FORM_NS); + contentElement.setType(OfficeToken.IMAGE); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.DRAWING_NS.equals(uri) && OfficeToken.IMAGE_DATA.equals(tagName)) + { + xLinkReadHandler = new XLinkReadHandler(); + return xLinkReadHandler; + } + + if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + // expect a report control. The control will modifiy the current + // element (as we do not separate the elements that strictly ..) + if ("report-control".equals(tagName)) + { + return new IgnoreAnyChildReadHandler(); + } + if ("report-element".equals(tagName)) + { + return new ReportElementReadHandler(contentElement); + } + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + // if we have static content (as well or only), that one goes into the + // alternate-content attribute right now. It is part of the output target + // and style rules to deal with them properly .. + if (xLinkReadHandler != null) + { + contentElement.setAttribute(OfficeNamespaces.OOREPORT_NS, + "alternate-content", xLinkReadHandler.getUri()); + } + } + + public Element getElement() + { + return contentElement; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/MasterDetailReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/MasterDetailReadHandler.java new file mode 100644 index 000000000000..7fe32ecc5d70 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/MasterDetailReadHandler.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ObjectOleElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class MasterDetailReadHandler extends ElementReadHandler +{ + + private final ObjectOleElement element; + private final boolean parseMasterDetail; + + public MasterDetailReadHandler(final ObjectOleElement element) + { + this.element = element; + parseMasterDetail = false; + } + + public MasterDetailReadHandler(final ObjectOleElement element, final boolean parseMasterDetail) + { + this.element = element; + this.parseMasterDetail = parseMasterDetail; + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + if (parseMasterDetail) + { + final String master = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "master"); + if (master != null && master.length() > 0) + { + final String detail = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "detail"); + element.addMasterDetailFields(master, detail); + } + } + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "master-detail-field".equals(tagName)) + { + // expect a report control. The control will modifiy the current + // element (as we do not separate the elements that strictly ..) + return new MasterDetailReadHandler(element, true); + } + + return null; + } + + public Element getElement() + { + return element; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportElementReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportElementReadHandler.java new file mode 100644 index 000000000000..c29488435fa3 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportElementReadHandler.java @@ -0,0 +1,100 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ReportElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class ReportElementReadHandler extends ElementReadHandler +{ + + private final ReportElement element; + + public ReportElementReadHandler(final ReportElement element) + { + if (element == null) + { + throw new NullPointerException(); + } + + this.element = element; + } + + public Element getElement() + { + return element; + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) + throws SAXException + { + super.startParsing(attrs); + final String printWhenGroupChange = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "print-when-group-change"); + element.setPrintWhenGroupChange(OfficeToken.TRUE.equals(printWhenGroupChange)); + final String printRepeatingValues = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "print-repeated-values"); + element.setPrintRepeatedValues(printRepeatingValues == null || OfficeToken.TRUE.equals(printRepeatingValues)); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (!OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + return null; + } + if ("conditional-print-expression".equals(tagName)) + { + return new ConditionalPrintExpressionReadHandler(element); + } + if ("format-condition".equals(tagName)) + { + return new FormatConditionReadHandler(element); + } + if ("report-component".equals(tagName)) + { + return new IgnoreAnyChildReadHandler(); + } + return null; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportReadHandler.java new file mode 100644 index 000000000000..ec270543b904 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/ReportReadHandler.java @@ -0,0 +1,232 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeReport; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.chart.ChartReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.JFreeReportInfo; +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +public class ReportReadHandler extends ElementReadHandler +{ + + private RootTableReadHandler pageHeader; + private RootTableReadHandler pageFooter; + private RootTableReadHandler reportHeader; + private RootTableReadHandler reportFooter; + private RootTableReadHandler detail; + private GroupReadHandler groups; + private final OfficeReport rootSection; + private final List functionHandlers; + private final List preBodyHandlers; + private final List postBodyHandlers; + private boolean pre = true; + + public ReportReadHandler() + { + rootSection = new OfficeReport(); + rootSection.setAttribute(JFreeReportInfo.REPORT_NAMESPACE, "simple-report-structure", Boolean.TRUE); + functionHandlers = new ArrayList(); + preBodyHandlers = new ArrayList(); + postBodyHandlers = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + final XmlReadHandler erh; + if (OfficeNamespaces.CHART_NS.equals(uri)) + { + ChartReadHandler crh = new ChartReadHandler(this); + if (pre) + { + preBodyHandlers.add(crh); + } + else + { + postBodyHandlers.add(crh); + } + erh = crh; + } + else if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + if ("function".equals(tagName)) + { + FunctionReadHandler frh = new FunctionReadHandler(); + functionHandlers.add(frh); + erh = frh; + } + else if ("page-header".equals(tagName)) + { + pageHeader = new RootTableReadHandler(); + erh = pageHeader; + } + else if ("report-header".equals(tagName)) + { + reportHeader = new RootTableReadHandler(); + erh = reportHeader; + } + else if ("report-footer".equals(tagName)) + { + reportFooter = new RootTableReadHandler(); + erh = reportFooter; + } + else if ("page-footer".equals(tagName)) + { + pageFooter = new RootTableReadHandler(); + erh = pageFooter; + } + else if ("detail".equals(tagName)) + { + pre = false; + detail = new DetailRootTableReadHandler(); + erh = detail; + } + else if ("group".equals(tagName)) + { + groups = new GroupReadHandler(this); + erh = groups; + } + else + { + erh = null; + } + } + else + { + erh = null; + } + return erh; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + if (pageHeader != null) + { + rootSection.setPageHeader(pageHeader.getElement()); + } + if (pageFooter != null) + { + rootSection.setPageFooter(pageFooter.getElement()); + } + if (reportHeader != null) + { + rootSection.setReportHeader(reportHeader.getElement()); + } + + final Section preBody = createSection("report-pre-body", preBodyHandlers); + if (preBody != null) + { + rootSection.setPreBodySection(preBody); + } + + final Section groupBody = new Section(); + groupBody.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + groupBody.setType("report-body"); + rootSection.setBodySection(groupBody); + + // XOR: Either the detail or the group section can be set .. + if (groups != null) + { + groupBody.addNode(groups.getElement()); + } + else if (detail != null) + { + groupBody.addNode(detail.getElement()); + } + + final Section postBody = createSection("report-post-body", postBodyHandlers); + if (postBody != null) + { + rootSection.setPostBodySection(postBody); + } + + if (reportFooter != null) + { + rootSection.setReportFooter(reportFooter.getElement()); + } + + for (int i = 0; i < functionHandlers.size(); i++) + { + final FunctionReadHandler handler = functionHandlers.get(i); + rootSection.addExpression(handler.getExpression()); + } + } + + public Element getElement() + { + return rootSection; + } + + private final Section createSection(final String name, final List handler) + { + if (!handler.isEmpty()) + { + final Section section = new Section(); + section.setNamespace(JFreeReportInfo.REPORT_NAMESPACE); + section.setType(name); + + for (int i = 0; i < handler.size(); i++) + { + final ElementReadHandler erh = handler.get(i); + section.addNode(erh.getElement()); + } + return section; + } + return null; + } + + public void setDetail(final RootTableReadHandler detail) + { + this.detail = detail; + } + + public final RootTableReadHandler getDetail() + { + return detail; + } + +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/RootTableReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/RootTableReadHandler.java new file mode 100644 index 000000000000..54b753b8f630 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/RootTableReadHandler.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.table.TableReadHandler; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class RootTableReadHandler extends ElementReadHandler +{ + + private TableReadHandler sectionTableReadHandler; + private final Section section; + + public RootTableReadHandler() + { + section = new Section(); + } + + protected RootTableReadHandler(final Section section) + { + if (section == null) + { + throw new NullPointerException(); + } + this.section = section; + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.TABLE_NS.equals(uri) && "table".equals(tagName)) + { + sectionTableReadHandler = new TableReadHandler(); + return sectionTableReadHandler; + } + if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "conditional-print-expression".equals(tagName)) + { + return new ConditionalPrintExpressionReadHandler(section); + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + if (sectionTableReadHandler != null) + { + section.addNode(sectionTableReadHandler.getElement()); + } + } + + public Element getElement() + { + return section; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/SubDocumentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/SubDocumentReadHandler.java new file mode 100644 index 000000000000..c815a69ba7ae --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/rpt/SubDocumentReadHandler.java @@ -0,0 +1,124 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.rpt; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.ObjectOleElement; +import org.libreoffice.report.pentaho.parser.draw.ObjectOleReadHandler; +import org.libreoffice.report.pentaho.parser.text.NoCDATATextContentReadHandler; + +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.IgnoreAnyChildReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class SubDocumentReadHandler extends NoCDATATextContentReadHandler +{ + + private final ObjectOleElement element; + private boolean ignore = false; + + public SubDocumentReadHandler(final ObjectOleElement element) + { + this.element = element; + } + + public SubDocumentReadHandler(final Section section, final ObjectOleElement element) + { + super(section); + this.element = element; + } + + public SubDocumentReadHandler(final Section section) + { + this(section, new ObjectOleElement()); + ignore = true; + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + if (!ignore) + { + super.startParsing(attrs); + } + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + // expect a report control. The control will modifiy the current + // element (as we do not separate the elements that strictly ..) + if ("report-control".equals(tagName)) + { + return new IgnoreAnyChildReadHandler(); + } + if ("report-element".equals(tagName)) + { + return new ReportElementReadHandler(element); + } + if ("master-detail-fields".equals(tagName)) + { + return new MasterDetailReadHandler(element); + } + } + if (OfficeNamespaces.DRAWING_NS.equals(uri)) + { + final XmlReadHandler readHandler; + if (OfficeToken.OBJECT_OLE.equals(tagName)) + { + readHandler = new ObjectOleReadHandler(element); + } + else if ("frame".equals(tagName)) + { + readHandler = new SubDocumentReadHandler(new Section(), element); + } + else + { + readHandler = null; + } + if (readHandler != null) + { + getChildren().add(readHandler); + return readHandler; + } + } + return super.getHandlerForChild(uri, tagName, atts); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/selectors.properties b/reportbuilder/java/org/libreoffice/report/pentaho/parser/selectors.properties new file mode 100644 index 000000000000..f9640d001fa5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/selectors.properties @@ -0,0 +1,104 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# x-no-translate + +# +# +# +# +# gets translated into: +# +# *[draw|style-name~="S1"] + +namespaces.draw=urn:oasis:names:tc:opendocument:xmlns:drawing:1.0 +namespaces.fo=urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0 +namespaces.style=urn:oasis:names:tc:opendocument:xmlns:style:1.0 +namespaces.table=urn:oasis:names:tc:opendocument:xmlns:table:1.0 +namespaces.chart=urn:oasis:names:tc:opendocument:xmlns:chart:1.0 +namespaces.rpt=http://openoffice.org/2005/report + +# +# maps the style family type (graphics) into a style rule of the +# common form: *[|~=""] +# +style-family.graphic=draw +style-family.graphics=draw +style-family.control=control +style-family.report-element=rpt +style-family.table-column=table +style-family.table-row=table +style-family.table-cell=table +style-family.table=table + +# Builds the selector pattern for a star-office stylesheet +# +# 0: Namespace prefix +# 1: Style-class attribute name (from the global namespace definition) +# 2: Style-class value +style-selector.pattern=*[{0}|{1}~="{2}"] + +# +# The following properties map the OpenOffice-generic font names +# into their CSS counterparts. As I dont have a clue, whats the difference +# between modern and swiss typeface, I am ignorant for now and ignore +# them. Blame me for that :) +font-family.roman=serif +font-family.swiss=sans-serif +font-family.modern=sans-serif +font-family.decorative=fantasy +font-family.script=cursive +font-family.system=monospace + + +# +# Defines the style property mapping for the resolve process from the +# OpenOffice report format into the internal LibLayout format +# +# attr.style...= +# +# Group is an selector, which corresponds to one of the sub-elements of +# the style element of the OpenDocument format. (It must match the element +# name for which the attributes are defined.) +# +# Namespace is a defined namespace prefix from this file as defined in the +# namespaces. section above +# +# AttrName is the defined attribute name for this namespace as defined by the +# opendocument standard. +attr.style.graphic-properties.draw.textarea-vertical-align=org.libreoffice.report.pentaho.parser.stylemapper.draw.TextAreaVerticalAlignMapper +attr.style.section-properties.fo.background-color=org.libreoffice.report.pentaho.parser.stylemapper.fo.BackgroundColorMapper +attr.style.paragraph-properties.fo.text-align=org.libreoffice.report.pentaho.parser.stylemapper.fo.TextAlignMapper +attr.style.paragraph-properties.style.vertical-align=org.libreoffice.report.pentaho.parser.stylemapper.style.VerticalAlignMapper +attr.style.text-properties.fo.color=org.libreoffice.report.pentaho.parser.stylemapper.fo.ColorMapper +attr.style.text-properties.style.font-name=org.libreoffice.report.pentaho.parser.stylemapper.style.FontNameMapper +attr.style.text-properties.fo.font-family=org.libreoffice.report.pentaho.parser.stylemapper.style.FontFamilyMapper +attr.style.table-properties.fo.background-color=org.libreoffice.report.pentaho.parser.stylemapper.fo.BackgroundColorMapper +#attr.style.text-properties.style.font-style-name= +attr.style.text-properties.style.font-family-generic=org.libreoffice.report.pentaho.parser.stylemapper.style.FontFamilyGenericMapper +attr.style.text-properties.style.font-pitch=org.libreoffice.report.pentaho.parser.stylemapper.style.FontPitchMapper +attr.style.text-properties.fo.font-size=org.libreoffice.report.pentaho.parser.stylemapper.fo.FontSizeMapper +attr.style.text-properties.fo.font-style=org.libreoffice.report.pentaho.parser.stylemapper.fo.FontStyleMapper +attr.style.text-properties.style.text-underline-style=org.libreoffice.report.pentaho.parser.stylemapper.style.TextUnderlineStyleMapper +attr.style.text-properties.style.text-underline-width=org.libreoffice.report.pentaho.parser.stylemapper.style.TextUnderlineWidthMapper +attr.style.text-properties.style.text-underline-color=org.libreoffice.report.pentaho.parser.stylemapper.style.TextUnderlineColorMapper +attr.style.text-properties.fo.font-weight=org.libreoffice.report.pentaho.parser.stylemapper.fo.FontWeightMapper +attr.style.text-properties.style.text-emphasize=org.libreoffice.report.pentaho.parser.stylemapper.style.TextEmphasizeMapper +attr.style.text-properties.style.font-relief=org.libreoffice.report.pentaho.parser.stylemapper.style.FontReliefMapper +attr.style.table-column-properties.table.column-width=org.libreoffice.report.pentaho.parser.stylemapper.table.ColumnWidthMapper +attr.style.table-row-properties.table.row-height=org.libreoffice.report.pentaho.parser.stylemapper.table.RowHeightMapper +attr.style.table-cell-properties.fo.border-right=org.libreoffice.report.pentaho.parser.stylemapper.fo.BorderRightMapper diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style-mapping.txt b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style-mapping.txt new file mode 100644 index 000000000000..6b1ede5d98cf --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style-mapping.txt @@ -0,0 +1,8 @@ + + + + +gets translated into: + +*[draw|style-name~="S1"] + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/FontFaceReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/FontFaceReadHandler.java new file mode 100644 index 000000000000..d6f7ed04f78b --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/FontFaceReadHandler.java @@ -0,0 +1,46 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.model.FontFaceElement; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; + +/** + * Reads a single font-face declaration. This is equal to the @font rule of + * the CSS standard. We do not interpret the attributes of the element in + * any way yet. + * + * @since 13.03.2007 + */ +public class FontFaceReadHandler extends ElementReadHandler +{ + + private final FontFaceElement fontFaceElement; + + public FontFaceReadHandler() + { + this.fontFaceElement = new FontFaceElement(); + } + + public Element getElement() + { + return fontFaceElement; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/MasterPageReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/MasterPageReadHandler.java new file mode 100644 index 000000000000..993331d02933 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/MasterPageReadHandler.java @@ -0,0 +1,95 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.model.OfficeMasterPage; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Todo: Document me! + * + * @since 13.03.2007 + */ +public class MasterPageReadHandler extends ElementReadHandler +{ + + private final OfficeMasterPage masterPage; + private final List otherHandlers; + + public MasterPageReadHandler() + { + masterPage = new OfficeMasterPage(); + this.otherHandlers = new ArrayList(); + } + + public OfficeMasterPage getMasterPage() + { + return masterPage; + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + final StyleDefinitionReadHandler readHandler = + new StyleDefinitionReadHandler(); + otherHandlers.add(readHandler); + return readHandler; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + for (int i = 0; i < otherHandlers.size(); i++) + { + final ElementReadHandler handler = otherHandlers.get(i); + masterPage.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return masterPage; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStyleReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStyleReadHandler.java new file mode 100644 index 000000000000..ed6b9ddeaa23 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStyleReadHandler.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.model.OfficeStyle; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * This class reads a single style rule. The resulting 'office-style' element + * is added to an 'office-styles' set. + */ +public class OfficeStyleReadHandler extends ElementReadHandler +{ + + private final OfficeStyle officeStyle; + private final List children; + + public OfficeStyleReadHandler() + { + this.officeStyle = new OfficeStyle(); + this.children = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { +// if (OfficeParserUtil.getInstance().isValidStyleElement(uri, tagName)) +// { +// } + final StyleDefinitionReadHandler readHandler = + new StyleDefinitionReadHandler(); + children.add(readHandler); + return readHandler; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final ElementReadHandler handler = children.get(i); + officeStyle.addNode(handler.getElement()); + } + } + + public OfficeStyle getOfficeStyle() + { + return officeStyle; + } + + public Element getElement() + { + return officeStyle; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStylesReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStylesReadHandler.java new file mode 100644 index 000000000000..17e684838bae --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/OfficeStylesReadHandler.java @@ -0,0 +1,130 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeStyles; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.data.DataStyleReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.modules.factories.report.flow.SectionReadHandler; +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class OfficeStylesReadHandler extends ElementReadHandler +{ + + private final List textStyleChildren; + private final List dataStyleChildren; + private final List otherStyleChildren; + private final List pageLayoutChildren; + private final OfficeStyles officeStyles; + + public OfficeStylesReadHandler(final OfficeStyles officeStyles) + { + this.officeStyles = officeStyles; + this.pageLayoutChildren = new ArrayList(); + this.dataStyleChildren = new ArrayList(); + this.textStyleChildren = new ArrayList(); + this.otherStyleChildren = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.STYLE_NS.equals(uri)) + { + if ("style".equals(tagName)) + { + final OfficeStyleReadHandler xrh = new OfficeStyleReadHandler(); + textStyleChildren.add(xrh); + return xrh; + } + else if ("page-layout".equals(tagName)) + { + final PageLayoutReadHandler prh = new PageLayoutReadHandler(); + pageLayoutChildren.add(prh); + return prh; + } + } + else if (OfficeNamespaces.DATASTYLE_NS.equals(uri)) + { + final DataStyleReadHandler xrh = new DataStyleReadHandler(false); + dataStyleChildren.add(xrh); + return xrh; + } + + final SectionReadHandler genericReadHander = new SectionReadHandler(); + otherStyleChildren.add(genericReadHander); + return genericReadHander; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < textStyleChildren.size(); i++) + { + final OfficeStyleReadHandler handler = textStyleChildren.get(i); + officeStyles.addStyle(handler.getOfficeStyle()); + } + + for (int i = 0; i < pageLayoutChildren.size(); i++) + { + final PageLayoutReadHandler handler = pageLayoutChildren.get(i); + officeStyles.addPageStyle(handler.getPageLayout()); + } + + for (int i = 0; i < dataStyleChildren.size(); i++) + { + final DataStyleReadHandler handler = dataStyleChildren.get(i); + officeStyles.addDataStyle(handler.getDataStyle()); + } + + for (int i = 0; i < otherStyleChildren.size(); i++) + { + final SectionReadHandler handler = otherStyleChildren.get(i); + officeStyles.addOtherNode((Element) handler.getNode()); + } + } + + public Element getElement() + { + return officeStyles; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/PageLayoutReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/PageLayoutReadHandler.java new file mode 100644 index 000000000000..f0ff7c8f3572 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/PageLayoutReadHandler.java @@ -0,0 +1,94 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.model.PageLayout; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Reads a page-layout element. + * + * @since 13.03.2007 + */ +public class PageLayoutReadHandler extends ElementReadHandler +{ + + private final PageLayout pageLayout; + private final List children; + + public PageLayoutReadHandler() + { + this.pageLayout = new PageLayout(); + this.children = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + final StyleDefinitionReadHandler readHandler = + new StyleDefinitionReadHandler(); + children.add(readHandler); + return readHandler; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final ElementReadHandler handler = children.get(i); + pageLayout.addNode(handler.getElement()); + } + } + + public PageLayout getPageLayout() + { + return pageLayout; + } + + public Element getElement() + { + return pageLayout; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/StyleDefinitionReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/StyleDefinitionReadHandler.java new file mode 100644 index 000000000000..b50f7f9767e4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/style/StyleDefinitionReadHandler.java @@ -0,0 +1,90 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.style; + +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Reads all children of a style-definition. This simply copies everything that + * is contained in the source-file into a generic structure that can be + * written out later. + */ +public class StyleDefinitionReadHandler extends ElementReadHandler +{ + + private final Section rawSection; + private final List children; + + public StyleDefinitionReadHandler() + { + this.rawSection = new Section(); + this.children = new ArrayList(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + final StyleDefinitionReadHandler readHandler = + new StyleDefinitionReadHandler(); + children.add(readHandler); + return readHandler; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final ElementReadHandler handler = children.get(i); + rawSection.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return rawSection; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java new file mode 100644 index 000000000000..0f7583dc6b74 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java @@ -0,0 +1,68 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import java.util.HashMap; +import java.util.Map; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.StyleKey; +import org.jfree.layouting.input.style.values.CSSValue; + + +public abstract class OneOfConstantsMapper implements StyleMapper +{ + + private final StyleKey styleKey; + private final Map mappings; + + protected OneOfConstantsMapper(final StyleKey styleKey) + { + this.styleKey = styleKey; + this.mappings = new HashMap(); + } + + public void addMapping(final String value, final CSSValue target) + { + mappings.put(value, target); + } + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSValue value = lookupMapping(attrValue); + if (value != null) + { + targetRule.setPropertyValue(styleKey, value); + } + } + + public StyleKey getStyleKey() + { + return styleKey; + } + + protected CSSValue lookupMapping(final String attrValue) + { + return mappings.get(attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java new file mode 100644 index 000000000000..af921da41ff8 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.draw; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; +import org.jfree.layouting.input.style.values.CSSConstant; + +public class TextAreaVerticalAlignMapper extends OneOfConstantsMapper +{ + + public TextAreaVerticalAlignMapper() + { + super(BoxStyleKeys.BOX_VERTICAL_ALIGN); + addMapping("top", new CSSConstant("top")); + addMapping("bottom", new CSSConstant("bottom")); + addMapping("middle", new CSSConstant("middle")); + addMapping("justify", new CSSConstant("justify")); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java new file mode 100644 index 000000000000..1ccad389f9b0 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java @@ -0,0 +1,41 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.border.BorderStyleKeys; +import org.jfree.layouting.input.style.values.CSSColorValue; +import org.jfree.layouting.util.ColorUtil; + +public class BackgroundColorMapper implements StyleMapper +{ + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); + if (cv != null) + { + targetRule.setPropertyValue(BorderStyleKeys.BACKGROUND_COLOR, cv); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java new file mode 100644 index 000000000000..dc669bd0d7a0 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java @@ -0,0 +1,34 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; + +public class BorderRightMapper implements StyleMapper +{ + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(attrName, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/ColorMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/ColorMapper.java new file mode 100644 index 000000000000..9e19b8e898b8 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/ColorMapper.java @@ -0,0 +1,43 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.color.ColorStyleKeys; +import org.jfree.layouting.input.style.values.CSSColorValue; +import org.jfree.layouting.util.ColorUtil; + +public class ColorMapper implements StyleMapper +{ + + public ColorMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); + if (cv != null) + { + targetRule.setPropertyValue(ColorStyleKeys.COLOR, cv); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java new file mode 100644 index 000000000000..683a79fa2932 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java @@ -0,0 +1,37 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; + +public class FontSizeMapper implements StyleMapper +{ + + public FontSizeMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(FontStyleKeys.FONT_SIZE, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java new file mode 100644 index 000000000000..ebe7cb6505f1 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java @@ -0,0 +1,37 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; + +public class FontStyleMapper implements StyleMapper +{ + + public FontStyleMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(FontStyleKeys.FONT_STYLE, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java new file mode 100644 index 000000000000..d9a5edcc1be4 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java @@ -0,0 +1,37 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; + +public class FontWeightMapper implements StyleMapper +{ + + public FontWeightMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(FontStyleKeys.FONT_WEIGHT, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java new file mode 100644 index 000000000000..f369af9bfa0a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java @@ -0,0 +1,38 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.fo; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.text.TextAlign; +import org.jfree.layouting.input.style.keys.text.TextStyleKeys; + +public class TextAlignMapper extends OneOfConstantsMapper +{ + + public TextAlignMapper() + { + super(TextStyleKeys.TEXT_ALIGN); + addMapping("start", TextAlign.START); + addMapping("end", TextAlign.END); + addMapping("left", TextAlign.LEFT); + addMapping("center", TextAlign.CENTER); + addMapping("right", TextAlign.RIGHT); + addMapping("justify", TextAlign.JUSTIFY); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java new file mode 100644 index 000000000000..fd9f3f7d029a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java @@ -0,0 +1,56 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; +import org.jfree.layouting.input.style.values.CSSStringType; +import org.jfree.layouting.input.style.values.CSSStringValue; +import org.jfree.layouting.input.style.values.CSSValue; +import org.jfree.layouting.input.style.values.CSSValueList; + +public class FontFamilyGenericMapper implements StyleMapper +{ + + public FontFamilyGenericMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSValue value = targetRule.getPropertyCSSValue(FontStyleKeys.FONT_FAMILY); + if (!(value instanceof CSSValueList)) + { + final CSSStringValue cssVal = new CSSStringValue(CSSStringType.STRING, attrValue); + targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, + new CSSValueList(new CSSValue[] + { + cssVal + })); + } + else + { + final CSSValueList list = (CSSValueList) value; + targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, + CSSValueList.insertLast(list, value)); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java new file mode 100644 index 000000000000..7268b29c697a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java @@ -0,0 +1,56 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; +import org.jfree.layouting.input.style.values.CSSStringType; +import org.jfree.layouting.input.style.values.CSSStringValue; +import org.jfree.layouting.input.style.values.CSSValue; +import org.jfree.layouting.input.style.values.CSSValueList; + +public class FontFamilyMapper implements StyleMapper +{ + + public FontFamilyMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSValue value = targetRule.getPropertyCSSValue(FontStyleKeys.FONT_FAMILY); + if (!(value instanceof CSSValueList)) + { + final CSSStringValue cssVal = new CSSStringValue(CSSStringType.STRING, attrValue); + targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, + new CSSValueList(new CSSValue[] + { + cssVal + })); + } + else + { + final CSSValueList list = (CSSValueList) value; + targetRule.setPropertyValue(FontStyleKeys.FONT_FAMILY, + CSSValueList.insertFirst(list, value)); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontNameMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontNameMapper.java new file mode 100644 index 000000000000..fbf0aa226674 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontNameMapper.java @@ -0,0 +1,40 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; +import org.jfree.layouting.input.style.values.CSSStringType; +import org.jfree.layouting.input.style.values.CSSStringValue; + +public class FontNameMapper implements StyleMapper +{ + + public FontNameMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValue(FontStyleKeys.FONT_NAME, + new CSSStringValue(CSSStringType.STRING, attrValue)); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontPitchMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontPitchMapper.java new file mode 100644 index 000000000000..15d87ae2ee10 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontPitchMapper.java @@ -0,0 +1,34 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; +import org.jfree.layouting.input.style.values.CSSConstant; + +public class FontPitchMapper extends OneOfConstantsMapper +{ + + public FontPitchMapper() + { + super(FontStyleKeys.FONT_PITCH); + addMapping("variable", new CSSConstant("variable")); + addMapping("fixed", new CSSConstant("fixed")); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontReliefMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontReliefMapper.java new file mode 100644 index 000000000000..c8f397eaf459 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/FontReliefMapper.java @@ -0,0 +1,37 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.font.FontStyleKeys; + +public class FontReliefMapper implements StyleMapper +{ + + public FontReliefMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(FontStyleKeys.FONT_EFFECT, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java new file mode 100644 index 000000000000..f3cdb77762da --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; + +public class TextEmphasizeMapper implements StyleMapper +{ + + public TextEmphasizeMapper() + { + } + + public void updateStyle(final String uri, final String attrName, final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString("font-emphasize", attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java new file mode 100644 index 000000000000..2be734d86361 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java @@ -0,0 +1,45 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.text.TextStyleKeys; +import org.jfree.layouting.input.style.values.CSSColorValue; +import org.jfree.layouting.util.ColorUtil; + +public class TextUnderlineColorMapper implements StyleMapper +{ + + public TextUnderlineColorMapper() + { + } + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + final CSSColorValue cv = (CSSColorValue) ColorUtil.parseColor(attrValue); + if (cv != null) + { + targetRule.setPropertyValue(TextStyleKeys.TEXT_UNDERLINE_COLOR, cv); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java new file mode 100644 index 000000000000..bb81af95417c --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java @@ -0,0 +1,40 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.text.TextDecorationStyle; +import org.jfree.layouting.input.style.keys.text.TextStyleKeys; + +public class TextUnderlineStyleMapper extends OneOfConstantsMapper +{ + + public TextUnderlineStyleMapper() + { + super(TextStyleKeys.TEXT_UNDERLINE_STYLE); + addMapping("none", TextDecorationStyle.NONE); + addMapping("solid", TextDecorationStyle.SOLID); + addMapping("dotted", TextDecorationStyle.DOTTED); + addMapping("dash", TextDecorationStyle.DASHED); + addMapping("long-dash", TextDecorationStyle.LONG_DASH); + addMapping("dot-dash", TextDecorationStyle.DOT_DASH); + addMapping("dot-dot-dash", TextDecorationStyle.DOT_DOT_DASH); + addMapping("wave", TextDecorationStyle.WAVE); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java new file mode 100644 index 000000000000..1ce8fd7346e2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java @@ -0,0 +1,67 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.border.BorderWidth; +import org.jfree.layouting.input.style.keys.text.TextDecorationWidth; +import org.jfree.layouting.input.style.keys.text.TextStyleKeys; +import org.jfree.layouting.input.style.values.CSSAutoValue; +import org.jfree.layouting.input.style.values.CSSValue; + +public class TextUnderlineWidthMapper extends OneOfConstantsMapper +{ + + public TextUnderlineWidthMapper() + { + super(TextStyleKeys.TEXT_UNDERLINE_WIDTH); + addMapping("auto", CSSAutoValue.getInstance()); + addMapping("normal", BorderWidth.MEDIUM); + addMapping("bold", TextDecorationWidth.BOLD); + addMapping("thin", BorderWidth.THIN); + addMapping("dash", TextDecorationWidth.DASH); + addMapping("medium", BorderWidth.MEDIUM); + addMapping("thick", BorderWidth.THICK); + } + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + if (attrName == null) + { + throw new NullPointerException(); + } + + final CSSValue value = lookupMapping(attrValue); + if (value != null) + { + targetRule.setPropertyValue(getStyleKey(), value); + } + else + // percent + // positive integer + // positive length + { + targetRule.setPropertyValueAsString(getStyleKey(), attrValue); + } + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java new file mode 100644 index 000000000000..733835c28849 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java @@ -0,0 +1,34 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.text.TextDecorationMode; +import org.jfree.layouting.input.style.keys.text.TextStyleKeys; + +public class TextUnderlineWordMode extends OneOfConstantsMapper +{ + + public TextUnderlineWordMode() + { + super(TextStyleKeys.TEXT_UNDERLINE_MODE); + addMapping("continuous", TextDecorationMode.CONTINUOUS); + addMapping("skip-white-space", TextDecorationMode.SKIP_WHITE_SPACE); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java new file mode 100644 index 000000000000..12759a67329d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java @@ -0,0 +1,38 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.style; + +import org.libreoffice.report.pentaho.parser.stylemapper.OneOfConstantsMapper; + +import org.jfree.layouting.input.style.keys.line.LineStyleKeys; +import org.jfree.layouting.input.style.values.CSSAutoValue; +import org.jfree.layouting.input.style.values.CSSConstant; + +public class VerticalAlignMapper extends OneOfConstantsMapper +{ + + public VerticalAlignMapper() + { + super(LineStyleKeys.VERTICAL_ALIGN); + addMapping("top", new CSSConstant("top")); + addMapping("bottom", new CSSConstant("bottom")); + addMapping("middle", new CSSConstant("middle")); + addMapping("baseline", new CSSConstant("baseline")); + addMapping("auto", CSSAutoValue.getInstance()); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java new file mode 100644 index 000000000000..c12d6aa62ed5 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java @@ -0,0 +1,43 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.table; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; + +/** + * Creation-Date: 03.07.2006, 13:08:27 + * + */ +public class ColumnWidthMapper implements StyleMapper +{ + + public ColumnWidthMapper() + { + } + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(BoxStyleKeys.WIDTH, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/RowHeightMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/RowHeightMapper.java new file mode 100644 index 000000000000..1d48b696853f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/stylemapper/table/RowHeightMapper.java @@ -0,0 +1,43 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.stylemapper.table; + +import org.libreoffice.report.pentaho.parser.StyleMapper; + +import org.jfree.layouting.input.style.CSSDeclarationRule; +import org.jfree.layouting.input.style.keys.box.BoxStyleKeys; + +/** + * Creation-Date: 03.07.2006, 13:08:27 + * + */ +public class RowHeightMapper implements StyleMapper +{ + + public RowHeightMapper() + { + } + + public void updateStyle(final String uri, + final String attrName, + final String attrValue, + final CSSDeclarationRule targetRule) + { + targetRule.setPropertyValueAsString(BoxStyleKeys.HEIGHT, attrValue); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/CoveredCellReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/CoveredCellReadHandler.java new file mode 100644 index 000000000000..c2cba6187024 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/CoveredCellReadHandler.java @@ -0,0 +1,44 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +/** + * Todo: Document me! + * + * @since 14.03.2007 + */ +public class CoveredCellReadHandler extends ElementReadHandler +{ + + private final Element coveredCell; + + public CoveredCellReadHandler() + { + coveredCell = new Section(); + } + + public Element getElement() + { + return coveredCell; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableCellReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableCellReadHandler.java new file mode 100644 index 000000000000..e987dbbe8712 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableCellReadHandler.java @@ -0,0 +1,36 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.pentaho.model.TableCellElement; +import org.libreoffice.report.pentaho.parser.text.NoCDATATextContentReadHandler; + +/** + * A read handler for table-cell contents. This is basicly a text-content + * read handler; we may extend this implementation later. + * + * @since 05.03.2007 + */ +public class TableCellReadHandler extends NoCDATATextContentReadHandler +{ + + public TableCellReadHandler() + { + super(new TableCellElement(), true); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnReadHandler.java new file mode 100644 index 000000000000..ba83447ea4f6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnReadHandler.java @@ -0,0 +1,43 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +/** + * Creation-Date: 03.07.2006, 14:26:55 + * + */ +public class TableColumnReadHandler extends ElementReadHandler +{ + + private final Section tableColumn; + + public TableColumnReadHandler() + { + tableColumn = new Section(); + } + + public Element getElement() + { + return tableColumn; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnsReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnsReadHandler.java new file mode 100644 index 000000000000..d8e866991053 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableColumnsReadHandler.java @@ -0,0 +1,93 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Creation-Date: 03.07.2006, 13:50:41 + * + */ +public class TableColumnsReadHandler extends ElementReadHandler +{ + + private final List columns; + private final Section tableColumns; + + public TableColumnsReadHandler() + { + columns = new ArrayList(); + tableColumns = new Section(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.TABLE_NS.equals(uri) && OfficeToken.TABLE_COLUMN.equals(tagName)) + { + final TableColumnReadHandler readHandler = new TableColumnReadHandler(); + columns.add(readHandler); + return readHandler; + } + + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < columns.size(); i++) + { + final TableColumnReadHandler handler = columns.get(i); + tableColumns.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return tableColumns; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableReadHandler.java new file mode 100644 index 000000000000..eec0954eeff6 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableReadHandler.java @@ -0,0 +1,135 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.model.OfficeTableSection; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.ConditionalPrintExpressionReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Creation-Date: 03.07.2006, 13:47:47 + * + */ +public class TableReadHandler extends ElementReadHandler +{ + + private final List children; + private final Section table; + + public TableReadHandler() + { + children = new ArrayList(); + table = new OfficeTableSection(); + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) + throws SAXException + { + super.startParsing(attrs); + final String enabled = attrs.getValue(OfficeNamespaces.OOREPORT_NS, "visible"); + if (enabled == null || OfficeToken.TRUE.equals(enabled)) + { + table.setEnabled(true); + } + else + { + table.setEnabled(false); + } + + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OOREPORT_NS.equals(uri) && "conditional-print-expression".equals(tagName)) + { + return new ConditionalPrintExpressionReadHandler(table); + } + else if (OfficeNamespaces.TABLE_NS.equals(uri)) + { + if (OfficeToken.TABLE_COLUMNS.equals(tagName) || OfficeToken.TABLE_HEADER_COLUMNS.equals(tagName)) + { + final TableColumnsReadHandler columns = new TableColumnsReadHandler(); + children.add(columns); + return columns; + } + else if (OfficeToken.TABLE_ROW.equals(tagName)) + { + final TableRowReadHandler rowHandler = new TableRowReadHandler(); + children.add(rowHandler); + return rowHandler; + } + else if (OfficeToken.TABLE_ROWS.equals(tagName) || OfficeToken.TABLE_HEADER_ROWS.equals(tagName)) + { + final TableRowsReadHandler rowsHandler = new TableRowsReadHandler(); + children.add(rowsHandler); + return rowsHandler; + } + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final ElementReadHandler handler = children.get(i); + table.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return table; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowReadHandler.java new file mode 100644 index 000000000000..413cfaefbb68 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowReadHandler.java @@ -0,0 +1,116 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Creation-Date: 03.07.2006, 13:51:47 + * + */ +public class TableRowReadHandler extends ElementReadHandler +{ + + private final List tableCells; + private final Section tableRow; + + public TableRowReadHandler() + { + tableCells = new ArrayList(); + tableRow = new Section(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + final ElementReadHandler rh; + if (OfficeNamespaces.TABLE_NS.equals(uri)) + { + if (OfficeToken.TABLE_CELL.equals(tagName)) + { + rh = new TableCellReadHandler(); + } + else if (OfficeToken.COVERED_TABLE_CELL.equals(tagName)) + { + rh = new CoveredCellReadHandler(); + } + else + { + rh = null; + } + if (rh != null) + { + tableCells.add(rh); + } + } + else + { + rh = null; + } + return rh; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < tableCells.size(); i++) + { + final ElementReadHandler handler = tableCells.get(i); + tableRow.addNode(handler.getElement()); + } + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Element getElement() + { + return tableRow; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowsReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowsReadHandler.java new file mode 100644 index 000000000000..019fdbdc8c34 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/table/TableRowsReadHandler.java @@ -0,0 +1,89 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.table; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +public class TableRowsReadHandler extends ElementReadHandler +{ + + private final List rows; + private final Section tableRows; + + public TableRowsReadHandler() + { + rows = new ArrayList(); + tableRows = new Section(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.TABLE_NS.equals(uri) && OfficeToken.TABLE_ROW.equals(tagName)) + { + final TableRowReadHandler readHandler = new TableRowReadHandler(); + rows.add(readHandler); + return readHandler; + } + + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < rows.size(); i++) + { + final TableRowReadHandler handler = rows.get(i); + tableRows.addNode(handler.getElement()); + } + } + + public Element getElement() + { + return tableRows; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/NoCDATATextContentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/NoCDATATextContentReadHandler.java new file mode 100644 index 000000000000..fd05be68a572 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/NoCDATATextContentReadHandler.java @@ -0,0 +1,182 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.report.pentaho.parser.text; + +import org.libreoffice.report.OfficeToken; +import org.libreoffice.report.pentaho.OfficeNamespaces; +import org.libreoffice.report.pentaho.parser.ElementReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.FixedContentReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.FormattedTextReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.ImageReadHandler; +import org.libreoffice.report.pentaho.parser.rpt.SubDocumentReadHandler; + +import java.util.ArrayList; +import java.util.List; + +import org.jfree.report.structure.Element; +import org.jfree.report.structure.Section; +import org.jfree.report.structure.StaticText; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * This is a generic implementation that accepts all input and adds special + * handlers for the report-elements. + * + */ +public class NoCDATATextContentReadHandler extends ElementReadHandler +{ + + private Section section; + private List children; + private boolean copyType; + + public NoCDATATextContentReadHandler(final Section section, + final boolean copyType) + { + this.children = new ArrayList(); + this.section = section; + this.copyType = copyType; + } + + public NoCDATATextContentReadHandler(final Section section) + { + this(section, false); + } + + public NoCDATATextContentReadHandler() + { + this(new Section(), true); + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + super.startParsing(attrs); + final Element element = getElement(); + if (copyType) + { + copyElementType(element); + } + copyAttributes(attrs, element); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (OfficeNamespaces.OOREPORT_NS.equals(uri)) + { + if ("fixed-content".equals(tagName)) + { + final FixedContentReadHandler fixedContentReadHandler = new FixedContentReadHandler(); + children.add(fixedContentReadHandler); + return fixedContentReadHandler; + } + if ("formatted-text".equals(tagName)) + { + final FormattedTextReadHandler formattedTextReadHandler = new FormattedTextReadHandler(); + children.add(formattedTextReadHandler); + return formattedTextReadHandler; + } + if (OfficeToken.IMAGE.equals(tagName)) + { + final ImageReadHandler imageReadHandler = new ImageReadHandler(); + children.add(imageReadHandler); + return imageReadHandler; + } + if ("sub-document".equals(tagName)) + { + final SubDocumentReadHandler subDocReadHandler = new SubDocumentReadHandler(section); + // children.add(subDocReadHandler); + return subDocReadHandler; + } + } + if (OfficeNamespaces.DRAWING_NS.equals(uri)) + { + final XmlReadHandler readHandler; + if (OfficeToken.IMAGE.equals(tagName)) + { + readHandler = new ImageReadHandler(); + } + else + { + readHandler = new NoCDATATextContentReadHandler(); + } + children.add(readHandler); + return readHandler; + } + else + { + final TextContentReadHandler readHandler = new TextContentReadHandler(); + children.add(readHandler); + return readHandler; + } + } + + public List getChildren() + { + return children; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() throws SAXException + { + for (int i = 0; i < children.size(); i++) + { + final Object o = children.get(i); + if (o instanceof ElementReadHandler) + { + final ElementReadHandler handler = (ElementReadHandler) o; + section.addNode(handler.getElement()); + } + else if (o instanceof StaticText) + { + section.addNode((StaticText) o); + } + } + } + + public Element getElement() + { + return section; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/TextContentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/TextContentReadHandler.java new file mode 100644 index 000000000000..08a410a5c7bc --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/text/TextContentReadHandler.java @@ -0,0 +1,60 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.text; + +import org.jfree.report.structure.Section; +import org.jfree.report.structure.StaticText; + +import org.xml.sax.SAXException; + +/** + * This is a generic implementation that accepts all input and adds special + * handlers for the report-elements. + * + */ +public class TextContentReadHandler extends NoCDATATextContentReadHandler +{ + + public TextContentReadHandler(final Section section, final boolean copyType) + { + super(section, copyType); + } + + public TextContentReadHandler(final Section section) + { + super(section); + } + + public TextContentReadHandler() + { + } + + /** + * This method is called to process the character data between element tags. + * + * @param ch the character buffer. + * @param start the start index. + * @param length the length. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + public void characters(final char[] ch, final int start, final int length) + throws SAXException + { + getChildren().add(new StaticText(new String(ch, start, length))); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/parser/xlink/XLinkReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/parser/xlink/XLinkReadHandler.java new file mode 100644 index 000000000000..beb57b2eabb9 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/parser/xlink/XLinkReadHandler.java @@ -0,0 +1,87 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.parser.xlink; + +import org.libreoffice.report.pentaho.OfficeNamespaces; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * An image reference. + * + */ +public class XLinkReadHandler extends AbstractXmlReadHandler +{ + + private String uri; + private String type; + private String show; + private String actuate; + + public XLinkReadHandler() + { + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) throws SAXException + { + uri = attrs.getValue(OfficeNamespaces.XLINK_NS, "uri"); + type = attrs.getValue(OfficeNamespaces.XLINK_NS, "type"); + show = attrs.getValue(OfficeNamespaces.XLINK_NS, "show"); + actuate = attrs.getValue(OfficeNamespaces.XLINK_NS, "actuate"); + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() throws SAXException + { + return uri; + } + + public String getUri() + { + return uri; + } + + public String getType() + { + return type; + } + + public String getShow() + { + return show; + } + + public String getActuate() + { + return actuate; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/smil.css b/reportbuilder/java/org/libreoffice/report/pentaho/smil.css new file mode 100644 index 000000000000..54d59ac828e2 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/smil.css @@ -0,0 +1,5 @@ +@namespace url("urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"); + +/** + * All default styles for formating-objects elements (if there are any). +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/star-office.css b/reportbuilder/java/org/libreoffice/report/pentaho/star-office.css new file mode 100644 index 000000000000..22d57ca05a18 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/star-office.css @@ -0,0 +1,5 @@ +@namespace url("http://openoffice.org/2004/office"); + +/** + * All default styles for office elements. +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/star-report.css b/reportbuilder/java/org/libreoffice/report/pentaho/star-report.css new file mode 100644 index 000000000000..b063d3563dbc --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/star-report.css @@ -0,0 +1,91 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +@namespace table url("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); +@namespace text url("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); +@namespace report url("http://openoffice.org/2005/report"); + +table|table { + display: table; +} + +table|table-columns { + display: table-column-group; +} + +table|table-column { + display: table-column; +} + +table|table-row { + display: table-row; +} + +table|table-cell { + display: table-cell; +} + +table|table-cell[number-columns-spanned], +table|table-cell[number-columns-spanned], +table|table-columns[number-columns-spanned], +table|table-column[number-columns-spanned] { + -x-liblayout-colspan: attr("table|number-columns-spanned"); +} + +table|table-cell[number-rows-spanned], +table|table-cell[number-rows-spanned] { + -x-liblayout-rowspan: attr("table|number-rows-spanned"); +} + + +/** + * Style definitions for star report. +*/ +* { + vertical-align: baseline; +} + +/** + * A standard number format declaration. The number of decimal places + * and whether there is grouping is defined by the format string. + * + * The position and content of embedded text is also derived directly from + * the given format string text. + + number + scientific + text + boolean + date + currency + percentage + fraction + +*/ +@format number myname { + -x-liblayout-decimal-replacement: "-"; + -x-liblayout-display-factor: 1000; + content: "'Prefix'#,##0.00'postfix'"; +} + +@format scientific anothername { + /* to be filled */ +} + + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/star-rpt.css b/reportbuilder/java/org/libreoffice/report/pentaho/star-rpt.css new file mode 100644 index 000000000000..47b6aca74d00 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/star-rpt.css @@ -0,0 +1,5 @@ +@namespace url("http://openoffice.org/2005/report"); + +/** + * All default styles for report elements. +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/LengthCalculator.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/LengthCalculator.java new file mode 100644 index 000000000000..d8ade2708f94 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/LengthCalculator.java @@ -0,0 +1,100 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import org.jfree.layouting.input.style.values.CSSNumericType; +import org.jfree.layouting.input.style.values.CSSNumericValue; + +/** + * A helper class that sums up various CSS-length. The various unit types are + * kept separate until the final result is computed to minimize the computation + * inaccuracy. + * + * @since 15.03.2007 + */ +public class LengthCalculator +{ + // and centimeter (x10) + + private double millimeter; + // and pica (x12) and inch(x72). Px is assumed to be in 96dpi. + private double point; + private double pixel; + + public LengthCalculator() + { + } + + public void add(final CSSNumericValue value) + { + if (value == null) + { + return; + } + + final CSSNumericType numericType = value.getType(); + if (numericType == CSSNumericType.CM) + { + millimeter += value.getValue() * 10; + } + else if (numericType == CSSNumericType.MM) + { + millimeter += value.getValue(); + } + else if (numericType == CSSNumericType.PT) + { + point += value.getValue(); + } + else if (numericType == CSSNumericType.PC) + { + point += 12 * value.getValue(); + } + else if (numericType == CSSNumericType.INCH) + { + point += 72 * value.getValue(); + } + else if (numericType == CSSNumericType.PX) + { + pixel += value.getValue(); + } + // LOGGER.debug ("Adding " + value + " [mm: " + millimeter + "] [pt: " + point + "] px: [" + pixel + "]"); + } + + public CSSNumericValue getResult() + { + if (pixel == 0 && point == 0) + { + return CSSNumericValue.createValue(CSSNumericType.MM, millimeter); + } + if (pixel == 0 && millimeter == 0) + { + return CSSNumericValue.createValue(CSSNumericType.PT, point); + } + if (point == 0 && millimeter == 0) + { + return CSSNumericValue.createValue(CSSNumericType.PX, pixel); + } + // else convert it. + + double result = point; + result += (millimeter * 10 * 72 / 254); + result += pixel * 72 / 96; + + return CSSNumericValue.createValue(CSSNumericType.PT, result); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapper.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapper.java new file mode 100644 index 000000000000..9335309c720f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapper.java @@ -0,0 +1,86 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import java.util.HashMap; +import java.util.Map; + +import org.pentaho.reporting.libraries.resourceloader.Resource; +import org.pentaho.reporting.libraries.resourceloader.ResourceException; +import org.pentaho.reporting.libraries.resourceloader.ResourceManager; + + +/** + * The style-mapper holds all information about the OpenOffice style mapping + * mechanism. OpenOffice references styles by their name and context, a style + * has a style-family assigned. The style family is determined by the element + * referencing the style, and there is no easily accessible information + * available on that. + *

+ * Therefore this mapper acts as gatekeeper for this information. The style + * mapping information is read from an external definition file and can be + * maintained externally. + * + * @since 11.03.2007 + */ +public class StyleMapper +{ + + private final Map backend; + + public StyleMapper() + { + this.backend = new HashMap(); + } + + public void addMapping(final StyleMappingRule rule) + { + backend.put(rule.getKey(), rule); + } + + public boolean isListOfStyles(final String elementNamespace, + final String elementTagName, + final String attributeNamespace, + final String attributeName) + { + final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementTagName, attributeNamespace, attributeName); + final StyleMappingRule rule = backend.get(key); + return rule != null && rule.isListOfValues(); + } + + public String getStyleFamilyFor(final String elementNamespace, + final String elementTagName, + final String attributeNamespace, + final String attributeName) + { + final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementTagName, attributeNamespace, attributeName); + final StyleMappingRule rule = backend.get(key); + if (rule == null) + { + return null; + } + return rule.getFamily(); + } + + public static StyleMapper loadInstance(final ResourceManager resourceManager) + throws ResourceException + { + final Resource resource = resourceManager.createDirectly("res://org/libreoffice/report/pentaho/styles/stylemapper.xml", StyleMapper.class); + return (StyleMapper) resource.getResource(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperKey.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperKey.java new file mode 100644 index 000000000000..605df59aa36a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperKey.java @@ -0,0 +1,108 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +/** + * A hash key for the stylemapper. + * + * @since 12.03.2007 + */ +public final class StyleMapperKey +{ + + private final String elementNamespace; + private final String elementName; + private final String attributeNamespace; + private final String attributeName; + private final int hashCode; + + public StyleMapperKey(final String elementNamespace, + final String elementName, + final String attributeNamespace, + final String attributeName) + { + if (elementNamespace == null) + { + throw new NullPointerException(); + } + if (elementName == null) + { + throw new NullPointerException(); + } + + this.elementNamespace = elementNamespace; + this.elementName = elementName; + this.attributeNamespace = attributeNamespace; + this.attributeName = attributeName; + this.hashCode = computeHashCode(); + } + + public String getElementNamespace() + { + return elementNamespace; + } + + public String getElementName() + { + return elementName; + } + + public String getAttributeNamespace() + { + return attributeNamespace; + } + + public String getAttributeName() + { + return attributeName; + } + + public boolean equals(final Object o) + { + if (this != o) + { + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final StyleMapperKey that = (StyleMapperKey) o; + + if ((attributeName != null ? !attributeName.equals(that.attributeName) : that.attributeName != null) || (attributeNamespace != null ? !attributeNamespace.equals(that.attributeNamespace) : that.attributeNamespace != null) || !elementName.equals(that.elementName) || !elementNamespace.equals(that.elementNamespace)) + { + return false; + } + } + + return true; + } + + private int computeHashCode() + { + int result = elementNamespace.hashCode(); + result = 31 * result + elementName.hashCode(); + result = 31 * result + (attributeNamespace != null ? attributeNamespace.hashCode() : 0); + result = 31 * result + (attributeName != null ? attributeName.hashCode() : 0); + return result; + } + + public int hashCode() + { + return hashCode; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlFactoryModule.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlFactoryModule.java new file mode 100644 index 000000000000..979b4c13552d --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlFactoryModule.java @@ -0,0 +1,60 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import org.pentaho.reporting.libraries.xmlns.parser.XmlDocumentInfo; +import org.pentaho.reporting.libraries.xmlns.parser.XmlFactoryModule; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +/** + * An XML-FactoryModule that load the style-mapper contents. + * + * @since 12.03.2007 + */ +public class StyleMapperXmlFactoryModule implements XmlFactoryModule +{ + + public static final String NAMESPACE = + "http://jfreereport.sourceforge.net/namespaces/engine/openoffice/stylemapper"; + + public StyleMapperXmlFactoryModule() + { + } + + public XmlReadHandler createReadHandler(final XmlDocumentInfo documentInfo) + { + return new StyleMappingDocumentReadHandler(); + } + + public int getDocumentSupport(final XmlDocumentInfo documentInfo) + { + final String rootNamespace = documentInfo.getRootElementNameSpace(); + if (StyleMapperXmlFactoryModule.NAMESPACE.equals(rootNamespace) && "style-mapper-definition".equals(documentInfo.getRootElement())) + { + + return XmlFactoryModule.RECOGNIZED_BY_NAMESPACE; + } + return XmlFactoryModule.NOT_RECOGNIZED; + } + + public String getDefaultNamespace(final XmlDocumentInfo documentInfo) + { + return null; + } +} + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlResourceFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlResourceFactory.java new file mode 100644 index 000000000000..5ae6d1a2dd6e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMapperXmlResourceFactory.java @@ -0,0 +1,46 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import org.jfree.report.JFreeReportBoot; + +import org.pentaho.reporting.libraries.base.config.Configuration; +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlResourceFactory; + +/** + * Todo: Document me! + * + * @since 12.03.2007 + */ +public class StyleMapperXmlResourceFactory extends AbstractXmlResourceFactory +{ + + public StyleMapperXmlResourceFactory() + { + } + + protected Configuration getConfiguration() + { + return JFreeReportBoot.getInstance().getGlobalConfig(); + } + + public Class getFactoryType() + { + return StyleMapper.class; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingDocumentReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingDocumentReadHandler.java new file mode 100644 index 000000000000..e96f89d92fbb --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingDocumentReadHandler.java @@ -0,0 +1,96 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import java.util.ArrayList; +import java.util.List; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + + +/** + * Todo: Document me! + * + * @since 12.03.2007 + */ +public class StyleMappingDocumentReadHandler extends AbstractXmlReadHandler +{ + + private final StyleMapper styleMapper; + private final List mappings; + + public StyleMappingDocumentReadHandler() + { + this.mappings = new ArrayList(); + this.styleMapper = new StyleMapper(); + } + + /** + * Returns the handler for a child element. + * + * @param tagName the tag name. + * @param atts the attributes. + * @return the handler or null, if the tagname is invalid. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected XmlReadHandler getHandlerForChild(final String uri, + final String tagName, + final Attributes atts) + throws SAXException + { + if (isSameNamespace(uri) && "mapping".equals(tagName)) + { + final StyleMappingReadHandler smr = new StyleMappingReadHandler(); + mappings.add(smr); + return smr; + } + return null; + } + + /** + * Done parsing. + * + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void doneParsing() + throws SAXException + { + for (int i = 0; i < mappings.size(); i++) + { + final StyleMappingReadHandler handler = mappings.get(i); + styleMapper.addMapping(handler.getRule()); + } + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public StyleMapper getObject() + throws SAXException + { + return styleMapper; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingReadHandler.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingReadHandler.java new file mode 100644 index 000000000000..8c3fbc1ba98e --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingReadHandler.java @@ -0,0 +1,91 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler; +import org.pentaho.reporting.libraries.xmlns.parser.ParseException; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * Todo: Document me! + * + * @since 12.03.2007 + */ +public class StyleMappingReadHandler extends AbstractXmlReadHandler +{ + + private StyleMappingRule rule; + + public StyleMappingReadHandler() + { + } + + /** + * Starts parsing. + * + * @param attrs the attributes. + * @throws org.xml.sax.SAXException if there is a parsing error. + */ + protected void startParsing(final Attributes attrs) + throws SAXException + { + final String elementNamespace = attrs.getValue(getUri(), + "element-namespace"); + if (elementNamespace == null) + { + throw new ParseException("Required attribute 'element-namespace' is missing", getLocator()); + } + + final String elementName = attrs.getValue(getUri(), "element-name"); + + if (elementName == null) + { + throw new ParseException("Required attribute 'element-name' is missing", getLocator()); + } + + final String attributeNamespace = attrs.getValue(getUri(), + "attribute-namespace"); + final String attributeName = attrs.getValue(getUri(), "attribute-name"); + + final boolean listOfValues = + "styleNameRefs".equals(attrs.getValue(getUri(), "type")); + + final String family = attrs.getValue(getUri(), "style-family"); + final StyleMapperKey key = new StyleMapperKey(elementNamespace, elementName, attributeNamespace, attributeName); + rule = new StyleMappingRule(key, family, listOfValues); + } + + public StyleMappingRule getRule() + { + return rule; + } + + /** + * Returns the object for this element or null, if this element does not + * create an object. + * + * @return the object. + */ + public Object getObject() + throws SAXException + { + return rule; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingRule.java b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingRule.java new file mode 100644 index 000000000000..6e5e7512a08f --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/StyleMappingRule.java @@ -0,0 +1,54 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho.styles; + +/** + * Todo: Document me! + * + * @since 12.03.2007 + */ +public class StyleMappingRule +{ + + private final StyleMapperKey key; + private final String family; + private final boolean listOfValues; + + public StyleMappingRule(final StyleMapperKey key, final String family, + final boolean listOfValues) + { + this.key = key; + this.family = family; + this.listOfValues = listOfValues; + } + + public StyleMapperKey getKey() + { + return key; + } + + public String getFamily() + { + return family; + } + + public boolean isListOfValues() + { + return listOfValues; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xml b/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xml new file mode 100644 index 000000000000..8e5e5bc49aab --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xml @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xsd b/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xsd new file mode 100644 index 000000000000..feb7234e83c0 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/styles/stylemapper.xsd @@ -0,0 +1,81 @@ + + + + + This schema describes the format of the stylemapper definition file. + The stylemapper declares what style-families are referenced by an element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/svg.css b/reportbuilder/java/org/libreoffice/report/pentaho/svg.css new file mode 100644 index 000000000000..ebe16e30b115 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/svg.css @@ -0,0 +1,5 @@ +@namespace url("urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"); + +/** + * All default styles for formating-objects elements (if there are any). +*/ diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/xsl-fo.css b/reportbuilder/java/org/libreoffice/report/pentaho/xsl-fo.css new file mode 100644 index 000000000000..f030a3872481 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/xsl-fo.css @@ -0,0 +1,5 @@ +@namespace url("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"); + +/** + * All default styles for formating-objects elements (if there are any). +*/ diff --git a/reportbuilder/java/org/libreoffice/report/util/DefaultJobProperties.java b/reportbuilder/java/org/libreoffice/report/util/DefaultJobProperties.java new file mode 100644 index 000000000000..ce0ea8dce131 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/util/DefaultJobProperties.java @@ -0,0 +1,71 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.util; + +import org.libreoffice.report.JobDefinitionException; +import org.libreoffice.report.JobProperties; +import org.libreoffice.report.ReportEngineMetaData; + +import java.util.HashMap; +import java.util.Map; + + +public class DefaultJobProperties implements JobProperties +{ + + private final ReportEngineMetaData metaData; + private final Map properties; + + public DefaultJobProperties(final ReportEngineMetaData metaData) + { + if (metaData == null) + { + throw new NullPointerException(); + } + this.properties = new HashMap(); + this.metaData = metaData; + } + + public Object getProperty(final String key) + { + return properties.get(key); + } + + public void setProperty(final String key, final Object value) + throws JobDefinitionException + { + final Class type = metaData.getParameterType(key); + if (type == null) + { + throw new JobDefinitionException("The parameter name is not known: " + key); + } + if (!type.isInstance(value)) + { + throw new JobDefinitionException("The parameter value is not understood"); + } + + this.properties.put(key, value); + } + + public JobProperties copy() + { + final DefaultJobProperties props = new DefaultJobProperties(metaData); + props.properties.putAll(properties); + return props; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/util/DefaultParameterMap.java b/reportbuilder/java/org/libreoffice/report/util/DefaultParameterMap.java new file mode 100644 index 000000000000..3eca2872be83 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/util/DefaultParameterMap.java @@ -0,0 +1,114 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.util; + +import org.libreoffice.report.ParameterMap; + +import java.util.HashMap; +import java.util.Map; + + +public class DefaultParameterMap implements ParameterMap +{ + + private final Map backend; + + public DefaultParameterMap() + { + backend = new HashMap(); + } + + public void clear() + { + backend.clear(); + } + + /** + * Retrieves the value stored for a key in this properties collection. + * + * @param key the property key. + * @return The stored value, or null if the key does not exist in this + * collection. + */ + public Object get(final String key) + { + if (key == null) + { + throw new NullPointerException("DefaultParameterMap.get (..): Parameter 'key' must not be null"); + } + return backend.get(key); + } + + /** + * Retrieves the value stored for a key in this properties collection, and returning the + * default value if the key was not stored in this properties collection. + * + * @param key the property key. + * @param defaultValue the default value to be returned when the key is not stored in + * this properties collection. + * @return The stored value, or the default value if the key does not exist in this + * collection. + */ + public Object get(final String key, final Object defaultValue) + { + if (key == null) + { + throw new NullPointerException("DefaultParameterMap.get (..): Parameter 'key' must not be null"); + } + final Object o = this.backend.get(key); + if (o == null) + { + return defaultValue; + } + return o; + } + + public String[] keys() + { + return this.backend.keySet().toArray(new String[backend.size()]); + } + + /** + * Adds a property to this properties collection. If a property with the given name + * exist, the property will be replaced with the new value. If the value is null, the + * property will be removed. + * + * @param key the property key. + * @param value the property value. + */ + public void put(final String key, final Object value) + { + if (key == null) + { + throw new NullPointerException("ReportProperties.put (..): Parameter 'key' must not be null"); + } + if (value == null) + { + this.backend.remove(key); + } + else + { + this.backend.put(key, value); + } + } + + public int size() + { + return this.backend.size(); + } +} diff --git a/reportbuilder/java/org/libreoffice/report/util/DefaultReportJobDefinition.java b/reportbuilder/java/org/libreoffice/report/util/DefaultReportJobDefinition.java new file mode 100644 index 000000000000..4f24dd99d474 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/util/DefaultReportJobDefinition.java @@ -0,0 +1,107 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.util; + +import org.libreoffice.report.DataSourceFactory; +import org.libreoffice.report.InputRepository; +import org.libreoffice.report.JobDefinitionException; +import org.libreoffice.report.JobProperties; +import org.libreoffice.report.OutputRepository; +import org.libreoffice.report.ParameterMap; +import org.libreoffice.report.ReportEngineMetaData; +import org.libreoffice.report.ReportEngineParameterNames; +import org.libreoffice.report.ReportJobDefinition; + +public class DefaultReportJobDefinition implements ReportJobDefinition +{ + + public static final String OUTPUT_TYPE = "output-type"; + private final DefaultParameterMap parameters; + private final DefaultJobProperties properties; + + public DefaultReportJobDefinition(final ReportEngineMetaData metaData) + { + this.parameters = new DefaultParameterMap(); + this.properties = new DefaultJobProperties(metaData); + } + + public void setDataSourceFactory(final DataSourceFactory dataSourceFactory) + throws JobDefinitionException + { + this.properties.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataSourceFactory); + } + + public DataSourceFactory getDataSourceFactory() + { + return (DataSourceFactory) this.properties.getProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY); + } + + public InputRepository getInputRepository() + { + return (InputRepository) this.properties.getProperty(ReportEngineParameterNames.INPUT_REPOSITORY); + } + + public void setInputRepository(final InputRepository inputRepository) + throws JobDefinitionException + { + this.properties.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, inputRepository); + } + + public OutputRepository getOutputRepository() + { + return (OutputRepository) this.properties.getProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY); + } + + public void setOutputRepository(final OutputRepository outputRepository) + throws JobDefinitionException + { + this.properties.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, outputRepository); + } + + /** + * The parameters of the root report definition. The parameters for the subreports are + * defined using mappings, it would not make sense to define them here. + * + * @return a map container for query parameters. + */ + public ParameterMap getQueryParameters() + { + return parameters; + } + + public void setReportDefinitionName(final String reportDefinitionName) + throws JobDefinitionException + { + this.properties.setProperty(ReportEngineParameterNames.INPUT_NAME, reportDefinitionName); + } + + /** + * The name under which we can load the report definition. + * + * @return the report definition's name. + */ + public String getReportDefinitionName() + { + return (String) this.properties.getProperty(ReportEngineParameterNames.INPUT_NAME); + } + + public JobProperties getProcessingParameters() + { + return properties; + } +} diff --git a/reportbuilder/java/org/libreoffice/report/util/ManifestWriter.java b/reportbuilder/java/org/libreoffice/report/util/ManifestWriter.java new file mode 100644 index 000000000000..3be716971158 --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/util/ManifestWriter.java @@ -0,0 +1,113 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.util; + +import org.libreoffice.report.OutputRepository; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.jfree.report.JFreeReportBoot; + +import org.pentaho.reporting.libraries.xmlns.common.AttributeList; +import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter; +import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport; + + +/** + * Creation-Date: 24.07.2007, 18:16:52 + * + */ +public class ManifestWriter +{ + // need this two strings other it breaks the ooo build :-( + + public static final String MANIFEST_NS = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"; + public static final String TAG_DEF_PREFIX = "org.libreoffice.report.pentaho.output."; + private final Map entries; + + public ManifestWriter() + { + entries = new HashMap(); + } + + public void addEntry(final String fullPath, final String mimeType) + { + if (fullPath == null) + { + throw new NullPointerException(); + } + if (mimeType == null) + { + throw new NullPointerException(); + } + if ("META-INF/manifest.xml".equals(fullPath)) + { + return; + } + entries.put(fullPath, mimeType); + } + + public boolean isEmpty() + { + return entries.isEmpty(); + } + + public void write(final OutputRepository outputRepository) throws IOException + { + if (isEmpty()) + { + return; + } + + final DefaultTagDescription tagDescription = new DefaultTagDescription(); + tagDescription.configure(JFreeReportBoot.getInstance().getGlobalConfig(), + TAG_DEF_PREFIX); + + final OutputStream manifestOutputStream = + outputRepository.createOutputStream("META-INF/manifest.xml", "text/xml"); + + final OutputStreamWriter writer = new OutputStreamWriter(manifestOutputStream, "UTF-8"); + final XmlWriter xmlWriter = new XmlWriter(writer, tagDescription); + xmlWriter.setAlwaysAddNamespace(true); + xmlWriter.writeXmlDeclaration("UTF-8"); + + final AttributeList rootAttributes = new AttributeList(); + rootAttributes.addNamespaceDeclaration("manifest", MANIFEST_NS); + xmlWriter.writeTag(MANIFEST_NS, "manifest", rootAttributes, XmlWriterSupport.OPEN); + + final Iterator> iterator = entries.entrySet().iterator(); + while (iterator.hasNext()) + { + final Map.Entry entry = iterator.next(); + final AttributeList entryAttrs = new AttributeList(); + entryAttrs.setAttribute(MANIFEST_NS, "media-type", entry.getValue()); + entryAttrs.setAttribute(MANIFEST_NS, "full-path", entry.getKey()); + xmlWriter.writeTag(MANIFEST_NS, "file-entry", entryAttrs, XmlWriterSupport.CLOSE); + } + + xmlWriter.writeCloseTag(); + xmlWriter.close(); + } +} diff --git a/reportbuilder/registry/data/org/openoffice/Office/DataAccess.xcu b/reportbuilder/registry/data/org/openoffice/Office/DataAccess.xcu index 1f1dd092e2a6..dc22b85744a6 100644 --- a/reportbuilder/registry/data/org/openoffice/Office/DataAccess.xcu +++ b/reportbuilder/registry/data/org/openoffice/Office/DataAccess.xcu @@ -27,7 +27,7 @@ Pentaho Reporting Flow Engine - com.sun.star.report.pentaho.SOReportJobFactory + org.libreoffice.report.pentaho.SOReportJobFactory diff --git a/reportbuilder/util/components.rdb b/reportbuilder/util/components.rdb index edf66caaab65..b49abce1a3ea 100644 --- a/reportbuilder/util/components.rdb +++ b/reportbuilder/util/components.rdb @@ -8,15 +8,15 @@ * --> - - + + - + - - + + diff --git a/reportbuilder/util/description.xml b/reportbuilder/util/description.xml index c120c122abbe..3ea03d6d700e 100644 --- a/reportbuilder/util/description.xml +++ b/reportbuilder/util/description.xml @@ -22,7 +22,7 @@ Report Builder - + diff --git a/reportbuilder/util/manifest.mf b/reportbuilder/util/manifest.mf index fb497ae71494..2b335b640796 100644 --- a/reportbuilder/util/manifest.mf +++ b/reportbuilder/util/manifest.mf @@ -1,2 +1,2 @@ -RegistrationClassName: com.sun.star.report.pentaho.SOReportJobFactory +RegistrationClassName: org.libreoffice.report.pentaho.SOReportJobFactory UNO-Type-Path: -- cgit