Source Code Cross Referenced for JFreeReportVisitor.java in  » Report » pentaho-report » org » pentaho » reportdesigner » crm » report » reportexporter » jfreereport » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Report » pentaho report » org.pentaho.reportdesigner.crm.report.reportexporter.jfreereport 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


0001:        /*
0002:         * Copyright 2006-2007 Pentaho Corporation.  All rights reserved.
0003:         * This software was developed by Pentaho Corporation and is provided under the terms
0004:         * of the Mozilla Public License, Version 1.1, or any later version. You may not use
0005:         * this file except in compliance with the license. If you need a copy of the license,
0006:         * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
0007:         *
0008:         * Software distributed under the Mozilla Public License is distributed on an "AS IS"
0009:         * basis, WITHOUT WARRANTY OF ANY KIND, either express or  implied. Please refer to
0010:         * the license for the specific language governing your rights and limitations.
0011:         *
0012:         * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
0013:         */
0014:        package org.pentaho.reportdesigner.crm.report.reportexporter.jfreereport;
0015:
0016:        import org.apache.commons.lang.StringUtils;
0017:        import org.jetbrains.annotations.NonNls;
0018:        import org.jetbrains.annotations.NotNull;
0019:        import org.jetbrains.annotations.Nullable;
0020:        import org.jfree.report.AbstractReportDefinition;
0021:        import org.jfree.report.AbstractRootLevelBand;
0022:        import org.jfree.report.Band;
0023:        import org.jfree.report.Element;
0024:        import org.jfree.report.ElementAlignment;
0025:        import org.jfree.report.Group;
0026:        import org.jfree.report.GroupFooter;
0027:        import org.jfree.report.GroupHeader;
0028:        import org.jfree.report.ImageElement;
0029:        import org.jfree.report.ItemBand;
0030:        import org.jfree.report.JFreeReport;
0031:        import org.jfree.report.NoDataBand;
0032:        import org.jfree.report.PageFooter;
0033:        import org.jfree.report.PageHeader;
0034:        import org.jfree.report.ReportFooter;
0035:        import org.jfree.report.ReportHeader;
0036:        import org.jfree.report.ShapeElement;
0037:        import org.jfree.report.SimplePageDefinition;
0038:        import org.jfree.report.Watermark;
0039:        import org.jfree.report.elementfactory.AnchorFieldElementFactory;
0040:        import org.jfree.report.elementfactory.DateFieldElementFactory;
0041:        import org.jfree.report.elementfactory.DrawableFieldElementFactory;
0042:        import org.jfree.report.elementfactory.ElementFactory;
0043:        import org.jfree.report.elementfactory.ImageFieldElementFactory;
0044:        import org.jfree.report.elementfactory.ImageURLFieldElementFactory;
0045:        import org.jfree.report.elementfactory.LabelElementFactory;
0046:        import org.jfree.report.elementfactory.MessageFieldElementFactory;
0047:        import org.jfree.report.elementfactory.NumberFieldElementFactory;
0048:        import org.jfree.report.elementfactory.ResourceFieldElementFactory;
0049:        import org.jfree.report.elementfactory.ResourceLabelElementFactory;
0050:        import org.jfree.report.elementfactory.ResourceMessageElementFactory;
0051:        import org.jfree.report.elementfactory.StaticImageURLElementFactory;
0052:        import org.jfree.report.elementfactory.StaticShapeElementFactory;
0053:        import org.jfree.report.elementfactory.TextElementFactory;
0054:        import org.jfree.report.elementfactory.TextFieldElementFactory;
0055:        import org.jfree.report.function.ElementVisibilitySwitchFunction;
0056:        import org.jfree.report.function.Expression;
0057:        import org.jfree.report.function.ExpressionCollection;
0058:        import org.jfree.report.function.FormulaExpression;
0059:        import org.jfree.report.layout.StaticLayoutManager;
0060:        import org.jfree.report.modules.misc.datafactory.StaticDataFactory;
0061:        import org.jfree.report.modules.misc.datafactory.sql.ConnectionProvider;
0062:        import org.jfree.report.modules.misc.datafactory.sql.SQLReportDataFactory;
0063:        import org.jfree.report.style.BandStyleKeys;
0064:        import org.jfree.report.style.BorderStyle;
0065:        import org.jfree.report.style.ElementStyleKeys;
0066:        import org.jfree.report.style.StyleKey;
0067:        import org.jfree.ui.FloatDimension;
0068:        import org.pentaho.reportdesigner.crm.report.ReportDesignerUtils;
0069:        import org.pentaho.reportdesigner.crm.report.datasetplugin.MQLDataFactory;
0070:        import org.pentaho.reportdesigner.crm.report.datasetplugin.MondrianDataFactory;
0071:        import org.pentaho.reportdesigner.crm.report.datasetplugin.MultiDataFactory;
0072:        import org.pentaho.reportdesigner.crm.report.datasetplugin.PreviewableSQLReportDataFactory;
0073:        import org.pentaho.reportdesigner.crm.report.datasetplugin.XPathDataFactory;
0074:        import org.pentaho.reportdesigner.crm.report.datasetplugin.jdbc.JDBCClassLoader;
0075:        import org.pentaho.reportdesigner.crm.report.datasetplugin.multidataset.JNDISource;
0076:        import org.pentaho.reportdesigner.crm.report.datasetplugin.multidataset.MultiDataSetReportElement;
0077:        import org.pentaho.reportdesigner.crm.report.datasetplugin.multidataset.Query;
0078:        import org.pentaho.reportdesigner.crm.report.datasetplugin.properties.PropertiesDataSetReportElement;
0079:        import org.pentaho.reportdesigner.crm.report.datasetplugin.properties.PropertyInfo;
0080:        import org.pentaho.reportdesigner.crm.report.datasetplugin.staticfactory.StaticFactoryDataSetReportElement;
0081:        import org.pentaho.reportdesigner.crm.report.model.AnchorFieldReportElement;
0082:        import org.pentaho.reportdesigner.crm.report.model.BandReportElement;
0083:        import org.pentaho.reportdesigner.crm.report.model.BandToplevelGroupReportElement;
0084:        import org.pentaho.reportdesigner.crm.report.model.BandToplevelItemReportElement;
0085:        import org.pentaho.reportdesigner.crm.report.model.BandToplevelPageReportElement;
0086:        import org.pentaho.reportdesigner.crm.report.model.BandToplevelReportElement;
0087:        import org.pentaho.reportdesigner.crm.report.model.ChartReportElement;
0088:        import org.pentaho.reportdesigner.crm.report.model.DateFieldReportElement;
0089:        import org.pentaho.reportdesigner.crm.report.model.DrawableFieldReportElement;
0090:        import org.pentaho.reportdesigner.crm.report.model.ElementBorderDefinition;
0091:        import org.pentaho.reportdesigner.crm.report.model.EllipseReportElement;
0092:        import org.pentaho.reportdesigner.crm.report.model.ImageFieldReportElement;
0093:        import org.pentaho.reportdesigner.crm.report.model.ImageURLFieldReportElement;
0094:        import org.pentaho.reportdesigner.crm.report.model.LabelReportElement;
0095:        import org.pentaho.reportdesigner.crm.report.model.LineDirection;
0096:        import org.pentaho.reportdesigner.crm.report.model.LineReportElement;
0097:        import org.pentaho.reportdesigner.crm.report.model.MessageFieldReportElement;
0098:        import org.pentaho.reportdesigner.crm.report.model.NumberFieldReportElement;
0099:        import org.pentaho.reportdesigner.crm.report.model.PageDefinition;
0100:        import org.pentaho.reportdesigner.crm.report.model.RectangleReportElement;
0101:        import org.pentaho.reportdesigner.crm.report.model.Report;
0102:        import org.pentaho.reportdesigner.crm.report.model.ReportElement;
0103:        import org.pentaho.reportdesigner.crm.report.model.ReportFunctionElement;
0104:        import org.pentaho.reportdesigner.crm.report.model.ReportFunctionsElement;
0105:        import org.pentaho.reportdesigner.crm.report.model.ReportGroup;
0106:        import org.pentaho.reportdesigner.crm.report.model.ReportGroups;
0107:        import org.pentaho.reportdesigner.crm.report.model.ResourceFieldReportElement;
0108:        import org.pentaho.reportdesigner.crm.report.model.ResourceLabelReportElement;
0109:        import org.pentaho.reportdesigner.crm.report.model.ResourceMessageReportElement;
0110:        import org.pentaho.reportdesigner.crm.report.model.RowBandingDefinition;
0111:        import org.pentaho.reportdesigner.crm.report.model.StaticImageReportElement;
0112:        import org.pentaho.reportdesigner.crm.report.model.StyleExpression;
0113:        import org.pentaho.reportdesigner.crm.report.model.StyleExpressions;
0114:        import org.pentaho.reportdesigner.crm.report.model.SubReport;
0115:        import org.pentaho.reportdesigner.crm.report.model.SubReportDataElement;
0116:        import org.pentaho.reportdesigner.crm.report.model.SubReportElement;
0117:        import org.pentaho.reportdesigner.crm.report.model.SubReportParameter;
0118:        import org.pentaho.reportdesigner.crm.report.model.SubReportParameters;
0119:        import org.pentaho.reportdesigner.crm.report.model.TextFieldReportElement;
0120:        import org.pentaho.reportdesigner.crm.report.model.TextReportElement;
0121:        import org.pentaho.reportdesigner.crm.report.model.TextReportElementHorizontalAlignment;
0122:        import org.pentaho.reportdesigner.crm.report.model.TextReportElementVerticalAlignment;
0123:        import org.pentaho.reportdesigner.crm.report.model.dataset.DataSetsReportElement;
0124:        import org.pentaho.reportdesigner.crm.report.model.functions.ExpressionRegistry;
0125:        import org.pentaho.reportdesigner.crm.report.model.layoutmanager.StackedReportLayoutManager;
0126:        import org.pentaho.reportdesigner.crm.report.reportexporter.ReportCreationException;
0127:        import org.pentaho.reportdesigner.crm.report.reportexporter.ReportVisitor;
0128:        import org.pentaho.reportdesigner.lib.client.util.DoubleDimension;
0129:        import org.pentaho.reportdesigner.lib.client.util.MathUtils;
0130:
0131:        import java.awt.*;
0132:        import java.awt.geom.Ellipse2D;
0133:        import java.awt.geom.Line2D;
0134:        import java.awt.geom.Point2D;
0135:        import java.awt.geom.Rectangle2D;
0136:        import java.awt.geom.RoundRectangle2D;
0137:        import java.awt.print.PageFormat;
0138:        import java.awt.print.Paper;
0139:        import java.io.File;
0140:        import java.net.MalformedURLException;
0141:        import java.net.URL;
0142:        import java.sql.Connection;
0143:        import java.sql.SQLException;
0144:        import java.text.SimpleDateFormat;
0145:        import java.util.ArrayList;
0146:        import java.util.Collection;
0147:        import java.util.HashMap;
0148:        import java.util.List;
0149:        import java.util.Locale;
0150:        import java.util.TreeSet;
0151:        import java.util.logging.Level;
0152:        import java.util.logging.Logger;
0153:
0154:        /**
0155:         * User: Martin Date: 28.10.2005 Time: 08:55:20
0156:         */
0157:        @SuppressWarnings({"ObjectEquality"})
0158:        public class JFreeReportVisitor extends ReportVisitor {
0159:            @NonNls
0160:            @NotNull
0161:            private static final Logger LOG = Logger
0162:                    .getLogger(JFreeReportVisitor.class.getName());
0163:
0164:            @NotNull
0165:            private JFreeReport jFreeReport;
0166:            @NotNull
0167:            private org.jfree.report.SubReport jFreeSubReport;
0168:
0169:            @Nullable
0170:            private AbstractReportDefinition currentJFreeReport;
0171:
0172:            @NotNull
0173:            private Locale defaultLocale;
0174:
0175:            @Nullable
0176:            private MultiDataFactory multiDataFactory;
0177:
0178:            private boolean preview;
0179:
0180:            public JFreeReportVisitor() {
0181:                defaultLocale = Locale.getDefault();
0182:                jFreeReport = new JFreeReport();
0183:                jFreeSubReport = new org.jfree.report.SubReport();
0184:            }
0185:
0186:            @Nullable
0187:            public Object getCurrentContext() {
0188:                return currentJFreeReport;
0189:            }
0190:
0191:            public void setCurrentContext(@Nullable
0192:            Object context) {
0193:                if (context instanceof  AbstractReportDefinition) {
0194:                    this .currentJFreeReport = (AbstractReportDefinition) context;
0195:                }
0196:            }
0197:
0198:            public boolean isPreview() {
0199:                return preview;
0200:            }
0201:
0202:            public void setPreview(boolean preview) {
0203:                this .preview = preview;
0204:            }
0205:
0206:            @NotNull
0207:            public JFreeReport getJFreeReport() {
0208:                return jFreeReport;
0209:            }
0210:
0211:            @NotNull
0212:            public org.jfree.report.SubReport getSubReport() {
0213:                return jFreeSubReport;
0214:            }
0215:
0216:            @NotNull
0217:            public AbstractReportDefinition visit(@Nullable
0218:            Object parent, @NotNull
0219:            Report report) throws ReportCreationException {
0220:                try {
0221:                    if (report instanceof  SubReport) {
0222:                        SubReport subReport = (SubReport) report;
0223:                        jFreeSubReport = new org.jfree.report.SubReport();
0224:                        jFreeSubReport.setQuery(subReport.getQuery());
0225:
0226:                        applySubReportParameters(jFreeSubReport, subReport
0227:                                .getParameters());
0228:
0229:                        defaultLocale = report.getDefaultLocale();
0230:
0231:                        return jFreeSubReport;
0232:                    } else {
0233:                        jFreeReport = new JFreeReport();
0234:                        jFreeReport.setDataFactory(new NullDataFactory());
0235:                        jFreeReport.setName(report.getName());
0236:
0237:                        defaultLocale = report.getDefaultLocale();
0238:
0239:                        // jFreeReport.setProperty(JFreeReport.REPORT_DEFINITION_CONTENTBASE, new File(".").toURI().toURL().toExternalForm());
0240:                        // jFreeReport.setPropertyMarked(JFreeReport.REPORT_DATE_PROPERTY, true);
0241:
0242:                        HashMap<String, String> configProperties = report
0243:                                .getReportConfiguration().getConfigProperties();
0244:                        for (String key : configProperties.keySet()) {
0245:                            jFreeReport.getReportConfiguration()
0246:                                    .setConfigProperty(key,
0247:                                            configProperties.get(key));
0248:                        }
0249:
0250:                        URL url = report.getResourceBundleClasspath();
0251:
0252:                        if (url != null) {
0253:                            jFreeReport
0254:                                    .setResourceBundleFactory(new URLResourceBundleFactory(
0255:                                            defaultLocale, url));
0256:                        }
0257:
0258:                        Paper paper = new Paper();
0259:
0260:                        PageDefinition pageDefinition = report
0261:                                .getPageDefinition();
0262:                        paper.setSize(pageDefinition.getInnerPageSize()
0263:                                .getWidth()
0264:                                + pageDefinition.getLeftBorder()
0265:                                + pageDefinition.getRightBorder(),
0266:                                pageDefinition.getInnerPageSize().getHeight()
0267:                                        + pageDefinition.getTopBorder()
0268:                                        + pageDefinition.getBottomBorder());
0269:                        paper.setImageableArea(pageDefinition.getLeftBorder(),
0270:                                pageDefinition.getTopBorder(), pageDefinition
0271:                                        .getInnerPageSize().getWidth(),
0272:                                pageDefinition.getInnerPageSize().getHeight());
0273:
0274:                        PageFormat pageFormat = new PageFormat();
0275:                        pageFormat.setPaper(paper);
0276:                        pageFormat.setOrientation(PageFormat.PORTRAIT);
0277:
0278:                        SimplePageDefinition simplePageDefinition = new SimplePageDefinition(
0279:                                pageFormat);
0280:
0281:                        jFreeReport.setPageDefinition(simplePageDefinition);
0282:
0283:                        return jFreeReport;
0284:                    }
0285:                } catch (Exception e) {
0286:                    throw new ReportCreationException("Unknown error occured",
0287:                            report, e);
0288:                }
0289:            }
0290:
0291:            private void applySubReportParameters(@NotNull
0292:            org.jfree.report.SubReport jFreeSubReport, @NotNull
0293:            SubReportParameters subReportParameters) {
0294:                if (subReportParameters.isGlobalImport()) {
0295:                    jFreeSubReport.addInputParameter("*", "*");
0296:                }
0297:                Collection<SubReportParameter> importParameters = subReportParameters
0298:                        .getImportParameters().values();
0299:                for (SubReportParameter importParameter : importParameters) {
0300:                    jFreeSubReport.addInputParameter(importParameter.getKey(),
0301:                            importParameter.getValue());
0302:                }
0303:
0304:                if (subReportParameters.isGlobalExport()) {
0305:                    jFreeSubReport.addExportParameter("*", "*");
0306:                }
0307:                Collection<SubReportParameter> exportParameters = subReportParameters
0308:                        .getExportParameters().values();
0309:                for (SubReportParameter exportParameter : exportParameters) {
0310:                    jFreeSubReport.addInputParameter(exportParameter.getKey(),
0311:                            exportParameter.getValue());
0312:                }
0313:            }
0314:
0315:            @NotNull
0316:            public Object visit(@Nullable
0317:            Object freeParent, @NotNull
0318:            BandToplevelReportElement bandToplevelReportElement)
0319:                    throws ReportCreationException {
0320:                try {
0321:                    if (bandToplevelReportElement.getParent() instanceof  ReportGroup) {
0322:                        ReportGroup reportGroup = (ReportGroup) bandToplevelReportElement
0323:                                .getParent();
0324:                        Group group = (Group) freeParent;
0325:                        if (bandToplevelReportElement == reportGroup
0326:                                .getGroupHeader()) {
0327:                            GroupHeader groupHeader = new GroupHeader();
0328:                            BandToplevelGroupReportElement bandToplevelGroupReportElement = (BandToplevelGroupReportElement) bandToplevelReportElement;
0329:                            groupHeader
0330:                                    .setRepeat(bandToplevelGroupReportElement
0331:                                            .isRepeat());
0332:                            groupHeader
0333:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0334:                                            .isPageBreakBefore());
0335:                            groupHeader
0336:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0337:                                            .isPageBreakAfter());
0338:                            applySizes(groupHeader, bandToplevelReportElement);
0339:                            addStyleExpressions(groupHeader,
0340:                                    bandToplevelGroupReportElement);
0341:                            group.setHeader(groupHeader);
0342:                            return groupHeader;
0343:                        } else if (bandToplevelReportElement == reportGroup
0344:                                .getGroupFooter()) {
0345:                            GroupFooter groupFooter = new GroupFooter();
0346:                            BandToplevelGroupReportElement bandToplevelGroupReportElement = (BandToplevelGroupReportElement) bandToplevelReportElement;
0347:                            groupFooter
0348:                                    .setRepeat(bandToplevelGroupReportElement
0349:                                            .isRepeat());
0350:                            groupFooter
0351:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0352:                                            .isPageBreakBefore());
0353:                            groupFooter
0354:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0355:                                            .isPageBreakAfter());
0356:                            applySizes(groupFooter, bandToplevelReportElement);
0357:                            addStyleExpressions(groupFooter,
0358:                                    bandToplevelGroupReportElement);
0359:                            group.setFooter(groupFooter);
0360:                            return groupFooter;
0361:                        }
0362:                    } else {
0363:                        AbstractReportDefinition freeReport = (AbstractReportDefinition) freeParent;
0364:                        Report parent = (Report) bandToplevelReportElement
0365:                                .getParent();
0366:
0367:                        if (parent.getReportHeaderBand() == bandToplevelReportElement) {
0368:                            ReportHeader reportHeader = freeReport
0369:                                    .getReportHeader();
0370:                            reportHeader
0371:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0372:                                            .isPageBreakBefore());
0373:                            reportHeader
0374:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0375:                                            .isPageBreakAfter());
0376:                            applySizes(reportHeader, bandToplevelReportElement);
0377:                            addStyleExpressions(reportHeader,
0378:                                    bandToplevelReportElement);
0379:                            return reportHeader;
0380:                        } else if (parent.getReportFooterBand() == bandToplevelReportElement) {
0381:                            ReportFooter reportFooter = freeReport
0382:                                    .getReportFooter();
0383:                            reportFooter
0384:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0385:                                            .isPageBreakBefore());
0386:                            reportFooter
0387:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0388:                                            .isPageBreakAfter());
0389:                            applySizes(reportFooter, bandToplevelReportElement);
0390:                            addStyleExpressions(reportFooter,
0391:                                    bandToplevelReportElement);
0392:                            return reportFooter;
0393:                        } else if (parent.getPageHeaderBand() == bandToplevelReportElement) {
0394:                            PageHeader pageHeader = freeReport.getPageHeader();
0395:                            BandToplevelPageReportElement bandToplevelPageReportElement = (BandToplevelPageReportElement) bandToplevelReportElement;
0396:                            pageHeader
0397:                                    .setDisplayOnFirstPage(bandToplevelPageReportElement
0398:                                            .isDisplayOnFirstPage());
0399:                            pageHeader
0400:                                    .setDisplayOnLastPage(bandToplevelPageReportElement
0401:                                            .isDisplayOnLastPage());
0402:                            applySizes(pageHeader, bandToplevelReportElement);
0403:                            addStyleExpressions(pageHeader,
0404:                                    bandToplevelPageReportElement);
0405:                            return pageHeader;
0406:                        } else if (parent.getPageFooterBand() == bandToplevelReportElement) {
0407:                            PageFooter pageFooter = freeReport.getPageFooter();
0408:                            BandToplevelPageReportElement bandToplevelPageReportElement = (BandToplevelPageReportElement) bandToplevelReportElement;
0409:                            pageFooter
0410:                                    .setDisplayOnFirstPage(bandToplevelPageReportElement
0411:                                            .isDisplayOnFirstPage());
0412:                            pageFooter
0413:                                    .setDisplayOnLastPage(bandToplevelPageReportElement
0414:                                            .isDisplayOnLastPage());
0415:                            applySizes(pageFooter, bandToplevelReportElement);
0416:                            addStyleExpressions(pageFooter,
0417:                                    bandToplevelPageReportElement);
0418:                            return pageFooter;
0419:                        } else if (parent.getItemBand() == bandToplevelReportElement) {
0420:                            ItemBand band = freeReport.getItemBand();
0421:                            band
0422:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0423:                                            .isPageBreakBefore());
0424:                            band
0425:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0426:                                            .isPageBreakAfter());
0427:                            applySizes(band, bandToplevelReportElement);
0428:                            addStyleExpressions(band, bandToplevelReportElement);
0429:                            BandToplevelItemReportElement itemBandReportElement = (BandToplevelItemReportElement) bandToplevelReportElement;
0430:                            RowBandingDefinition rowBandingDefinition = itemBandReportElement
0431:                                    .getRowBandingDefinition();
0432:                            if (rowBandingDefinition.isEnabled()) {
0433:                                ElementVisibilitySwitchFunction switchFunction = new ElementVisibilitySwitchFunction();
0434:                                switchFunction
0435:                                        .setElement("RowBandingBackgroundRect_IAmTheRandomSuffix314152654");// NON-NLS
0436:                                switchFunction
0437:                                        .setInitialState(rowBandingDefinition
0438:                                                .isStartState());
0439:                                switchFunction
0440:                                        .setNumberOfElements(rowBandingDefinition
0441:                                                .getSwitchItemCount());
0442:                                freeReport.getExpressions().add(switchFunction);
0443:
0444:                                ShapeElement shapeElement = StaticShapeElementFactory
0445:                                        .createRectangleShapeElement(
0446:                                                "RowBandingBackgroundRect_IAmTheRandomSuffix314152654",
0447:                                                rowBandingDefinition.getColor(),
0448:                                                new BasicStroke(1),
0449:                                                new Rectangle2D.Double(0, 0,
0450:                                                        -100, -100), false,
0451:                                                true);// NON-NLS
0452:                                band.addElement(shapeElement);
0453:                            }
0454:                            return band;
0455:                        } else if (parent.getWatermarkBand() == bandToplevelReportElement) {
0456:                            Watermark watermark = freeReport.getWatermark();
0457:                            watermark
0458:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0459:                                            .isPageBreakBefore());
0460:                            watermark
0461:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0462:                                            .isPageBreakAfter());
0463:                            applySizes(watermark, bandToplevelReportElement);
0464:                            addStyleExpressions(watermark,
0465:                                    bandToplevelReportElement);
0466:                            return watermark;
0467:                        } else if (parent.getNoDataBand() == bandToplevelReportElement) {
0468:                            NoDataBand noDataBand = freeReport.getNoDataBand();
0469:                            noDataBand
0470:                                    .setPagebreakBeforePrint(bandToplevelReportElement
0471:                                            .isPageBreakBefore());
0472:                            noDataBand
0473:                                    .setPagebreakAfterPrint(bandToplevelReportElement
0474:                                            .isPageBreakAfter());
0475:                            applySizes(noDataBand, bandToplevelReportElement);
0476:                            addStyleExpressions(noDataBand,
0477:                                    bandToplevelReportElement);
0478:                            return noDataBand;
0479:                        }
0480:                    }
0481:                } catch (RuntimeException e) {
0482:                    throw new ReportCreationException("Unknown error occured",
0483:                            bandToplevelReportElement, e);
0484:                }
0485:                throw new ReportCreationException("Wrong element type",
0486:                        bandToplevelReportElement, new Throwable());
0487:            }
0488:
0489:            private void applySizes(@NotNull
0490:            Element reportHeader, @NotNull
0491:            BandToplevelReportElement bandToplevelReportElement)
0492:                    throws ReportCreationException {
0493:                try {
0494:                    DoubleDimension minimumSize = bandToplevelReportElement
0495:                            .getMinimumSize();
0496:                    if (minimumSize.getWidth() > 0
0497:                            || minimumSize.getHeight() > 0) {
0498:                        reportHeader.setMinimumSize(minimumSize);
0499:                    }
0500:                    DoubleDimension maximumSize = bandToplevelReportElement
0501:                            .getMaximumSize();
0502:                    if (maximumSize.getWidth() > 0
0503:                            || maximumSize.getHeight() > 0) {
0504:                        reportHeader.setMaximumSize(maximumSize);
0505:                    }
0506:                    DoubleDimension preferredSize = bandToplevelReportElement
0507:                            .getPreferredSize();
0508:                    if (preferredSize.getWidth() > 0
0509:                            || preferredSize.getHeight() > 0) {
0510:                        reportHeader.setPreferredSize(preferredSize);
0511:                    }
0512:                } catch (RuntimeException e) {
0513:                    throw new ReportCreationException("Unknown error occured",
0514:                            bandToplevelReportElement, e);
0515:                }
0516:            }
0517:
0518:            @NotNull
0519:            public Object visit(@Nullable
0520:            Object parent, @NotNull
0521:            BandReportElement bandReportElement) throws ReportCreationException {
0522:                try {
0523:                    Band band = new Band();
0524:                    band.setName(bandReportElement.getName());
0525:                    band.getStyle().setStyleProperty(
0526:                            StaticLayoutManager.ABSOLUTE_POS,
0527:                            bandReportElement.getPosition());
0528:                    band.setMinimumSize(bandReportElement.getMinimumSize());
0529:
0530:                    if (bandReportElement.getReportLayoutManager() instanceof  StackedReportLayoutManager) {
0531:                        band.getStyle().setStyleProperty(BandStyleKeys.LAYOUT,
0532:                                "block");// NON-NLS
0533:                    }
0534:
0535:                    if (!MathUtils.approxEquals(bandReportElement
0536:                            .getMaximumSize().getHeight(), 0)
0537:                            || !MathUtils.approxEquals(bandReportElement
0538:                                    .getMaximumSize().getWidth(), 0)) {
0539:                        band.setMaximumSize(bandReportElement.getMaximumSize());
0540:                    } else {
0541:                        band.setMaximumSize(new DoubleDimension(
0542:                                bandReportElement.getMinimumSize().getWidth(),
0543:                                Integer.MAX_VALUE));
0544:                    }
0545:
0546:                    if (!MathUtils.approxEquals(bandReportElement
0547:                            .getPreferredSize().getHeight(), 0)
0548:                            || !MathUtils.approxEquals(bandReportElement
0549:                                    .getPreferredSize().getWidth(), 0)) {
0550:                        band.setPreferredSize(bandReportElement
0551:                                .getPreferredSize());
0552:                    }
0553:
0554:                    if (parent instanceof  Band) {
0555:                        Band b = (Band) parent;
0556:                        addStyleExpressions(band, bandReportElement);
0557:                        b.addElement(band);
0558:                    }
0559:                    return band;
0560:                } catch (RuntimeException e) {
0561:                    throw new ReportCreationException("Unknown error occured",
0562:                            bandReportElement, e);
0563:                }
0564:            }
0565:
0566:            @NotNull
0567:            public Object visit(@Nullable
0568:            Object freeParent, @NotNull
0569:            DateFieldReportElement dateFieldReportElement)
0570:                    throws ReportCreationException {
0571:                try {
0572:                    DateFieldElementFactory dateFieldElementFactory = new DateFieldElementFactory();
0573:                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
0574:                            dateFieldReportElement.getFormat().toPattern(),
0575:                            defaultLocale);
0576:                    dateFieldElementFactory.setFormat(simpleDateFormat);
0577:                    dateFieldElementFactory
0578:                            .setExcelCellFormat(dateFieldReportElement
0579:                                    .getExcelDateFormat());
0580:                    dateFieldElementFactory.setFieldname(dateFieldReportElement
0581:                            .getFieldName());
0582:                    dateFieldElementFactory
0583:                            .setNullString(dateFieldReportElement
0584:                                    .getNullString());
0585:                    dateFieldElementFactory.setFormula(""
0586:                            .equals(dateFieldReportElement.getFormula()
0587:                                    .getText().trim()) ? null
0588:                            : dateFieldReportElement.getFormula().getText());
0589:
0590:                    applyTextFieldValues(dateFieldElementFactory,
0591:                            dateFieldReportElement);
0592:                    applyElementValues(dateFieldElementFactory,
0593:                            dateFieldReportElement);
0594:
0595:                    return addTextElementToBand(freeParent,
0596:                            dateFieldReportElement, dateFieldElementFactory);
0597:                } catch (RuntimeException e) {
0598:                    throw new ReportCreationException("Unknown error occured",
0599:                            dateFieldReportElement, e);
0600:                }
0601:            }
0602:
0603:            @NotNull
0604:            public Object visit(@Nullable
0605:            Object freeParent, @NotNull
0606:            LabelReportElement labelReportElement)
0607:                    throws ReportCreationException {
0608:                try {
0609:                    LabelElementFactory labelElementFactory = new LabelElementFactory();
0610:                    labelElementFactory.setText(labelReportElement.getText());
0611:
0612:                    applyTextFieldValues(labelElementFactory,
0613:                            labelReportElement);
0614:                    applyElementValues(labelElementFactory, labelReportElement);
0615:
0616:                    return addTextElementToBand(freeParent, labelReportElement,
0617:                            labelElementFactory);
0618:                } catch (RuntimeException e) {
0619:                    throw new ReportCreationException("Unknown error occured",
0620:                            labelReportElement, e);
0621:                }
0622:            }
0623:
0624:            @NotNull
0625:            private Element addTextElementToBand(@NotNull
0626:            Object freeParent, @NotNull
0627:            TextReportElement labelReportElement, @NotNull
0628:            ElementFactory labelElementFactory) {
0629:                Band e = (Band) freeParent;
0630:
0631:                Element element = labelElementFactory.createElement();
0632:
0633:                addStyleExpressions(element, labelReportElement);
0634:                e.addElement(element);
0635:
0636:                return element;
0637:            }
0638:
0639:            private void addStyleExpressions(@NotNull
0640:            Element element, @NotNull
0641:            ReportElement reportElement) {
0642:                StyleExpressions styleExpressions = reportElement
0643:                        .getStyleExpressions();
0644:                List<StyleExpression> list = styleExpressions
0645:                        .getStyleExpressions();
0646:
0647:                for (StyleExpression styleExpression : list) {
0648:                    if (!"".equals(styleExpression.getExpression())) {
0649:                        String keyName = styleExpression.getStyleKeyName();
0650:                        StyleKey key = StyleKey.getStyleKey(keyName);
0651:                        if (key != null) {
0652:                            FormulaExpression expression = new FormulaExpression();
0653:                            expression.setFormula(styleExpression
0654:                                    .getExpression());
0655:                            element.setStyleExpression(key, expression);
0656:                        }
0657:                    }
0658:                }
0659:
0660:                if (reportElement.getBackground() != null) {
0661:                    element.getStyle().setStyleProperty(
0662:                            ElementStyleKeys.BACKGROUND_COLOR,
0663:                            reportElement.getBackground());
0664:                }
0665:
0666:                element.getStyle().setStyleProperty(
0667:                        ElementStyleKeys.PADDING_TOP,
0668:                        Float.valueOf((float) reportElement.getPadding()
0669:                                .getTop()));
0670:                element.getStyle().setStyleProperty(
0671:                        ElementStyleKeys.PADDING_BOTTOM,
0672:                        Float.valueOf((float) reportElement.getPadding()
0673:                                .getBottom()));
0674:                element.getStyle().setStyleProperty(
0675:                        ElementStyleKeys.PADDING_LEFT,
0676:                        Float.valueOf((float) reportElement.getPadding()
0677:                                .getLeft()));
0678:                element.getStyle().setStyleProperty(
0679:                        ElementStyleKeys.PADDING_RIGHT,
0680:                        Float.valueOf((float) reportElement.getPadding()
0681:                                .getRight()));
0682:
0683:                element.getStyle().setStyleProperty(
0684:                        ElementStyleKeys.BORDER_TOP_COLOR,
0685:                        reportElement.getElementBorder().getTopSide()
0686:                                .getColor());
0687:                element.getStyle().setStyleProperty(
0688:                        ElementStyleKeys.BORDER_TOP_WIDTH,
0689:                        Float.valueOf((float) reportElement.getElementBorder()
0690:                                .getTopSide().getWidth()));
0691:                element.getStyle().setStyleProperty(
0692:                        ElementStyleKeys.BORDER_TOP_STYLE,
0693:                        getBorderStyle(reportElement.getElementBorder()
0694:                                .getTopSide().getType()));
0695:
0696:                element.getStyle().setStyleProperty(
0697:                        ElementStyleKeys.BORDER_TOP_LEFT_RADIUS,
0698:                        reportElement.getElementBorder().getTopLeftEdge()
0699:                                .getRadii());
0700:
0701:                if (reportElement.getElementBorder().isSameBorderForAllSides()) {
0702:                    element.getStyle().setStyleProperty(
0703:                            ElementStyleKeys.BORDER_TOP_COLOR,
0704:                            reportElement.getElementBorder().getTopSide()
0705:                                    .getColor());
0706:                    element.getStyle().setStyleProperty(
0707:                            ElementStyleKeys.BORDER_TOP_WIDTH,
0708:                            Float
0709:                                    .valueOf((float) reportElement
0710:                                            .getElementBorder().getTopSide()
0711:                                            .getWidth()));
0712:                    element.getStyle().setStyleProperty(
0713:                            ElementStyleKeys.BORDER_TOP_STYLE,
0714:                            getBorderStyle(reportElement.getElementBorder()
0715:                                    .getTopSide().getType()));
0716:
0717:                    element.getStyle().setStyleProperty(
0718:                            ElementStyleKeys.BORDER_LEFT_COLOR,
0719:                            reportElement.getElementBorder().getTopSide()
0720:                                    .getColor());
0721:                    element.getStyle().setStyleProperty(
0722:                            ElementStyleKeys.BORDER_LEFT_WIDTH,
0723:                            Float
0724:                                    .valueOf((float) reportElement
0725:                                            .getElementBorder().getTopSide()
0726:                                            .getWidth()));
0727:                    element.getStyle().setStyleProperty(
0728:                            ElementStyleKeys.BORDER_LEFT_STYLE,
0729:                            getBorderStyle(reportElement.getElementBorder()
0730:                                    .getTopSide().getType()));
0731:
0732:                    element.getStyle().setStyleProperty(
0733:                            ElementStyleKeys.BORDER_RIGHT_COLOR,
0734:                            reportElement.getElementBorder().getTopSide()
0735:                                    .getColor());
0736:                    element.getStyle().setStyleProperty(
0737:                            ElementStyleKeys.BORDER_RIGHT_WIDTH,
0738:                            Float
0739:                                    .valueOf((float) reportElement
0740:                                            .getElementBorder().getTopSide()
0741:                                            .getWidth()));
0742:                    element.getStyle().setStyleProperty(
0743:                            ElementStyleKeys.BORDER_RIGHT_STYLE,
0744:                            getBorderStyle(reportElement.getElementBorder()
0745:                                    .getTopSide().getType()));
0746:
0747:                    element.getStyle().setStyleProperty(
0748:                            ElementStyleKeys.BORDER_BOTTOM_COLOR,
0749:                            reportElement.getElementBorder().getTopSide()
0750:                                    .getColor());
0751:                    element.getStyle().setStyleProperty(
0752:                            ElementStyleKeys.BORDER_BOTTOM_WIDTH,
0753:                            Float
0754:                                    .valueOf((float) reportElement
0755:                                            .getElementBorder().getTopSide()
0756:                                            .getWidth()));
0757:                    element.getStyle().setStyleProperty(
0758:                            ElementStyleKeys.BORDER_BOTTOM_STYLE,
0759:                            getBorderStyle(reportElement.getElementBorder()
0760:                                    .getTopSide().getType()));
0761:
0762:                    element.getStyle().setStyleProperty(
0763:                            ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS,
0764:                            reportElement.getElementBorder().getTopLeftEdge()
0765:                                    .getRadii());
0766:                    element.getStyle().setStyleProperty(
0767:                            ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS,
0768:                            reportElement.getElementBorder().getTopLeftEdge()
0769:                                    .getRadii());
0770:                    element.getStyle().setStyleProperty(
0771:                            ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS,
0772:                            reportElement.getElementBorder().getTopLeftEdge()
0773:                                    .getRadii());
0774:                } else {
0775:                    element.getStyle().setStyleProperty(
0776:                            ElementStyleKeys.BORDER_LEFT_COLOR,
0777:                            reportElement.getElementBorder().getLeftSide()
0778:                                    .getColor());
0779:                    element.getStyle().setStyleProperty(
0780:                            ElementStyleKeys.BORDER_LEFT_WIDTH,
0781:                            Float.valueOf((float) reportElement
0782:                                    .getElementBorder().getLeftSide()
0783:                                    .getWidth()));
0784:                    element.getStyle().setStyleProperty(
0785:                            ElementStyleKeys.BORDER_LEFT_STYLE,
0786:                            getBorderStyle(reportElement.getElementBorder()
0787:                                    .getLeftSide().getType()));
0788:
0789:                    element.getStyle().setStyleProperty(
0790:                            ElementStyleKeys.BORDER_RIGHT_COLOR,
0791:                            reportElement.getElementBorder().getRightSide()
0792:                                    .getColor());
0793:                    element.getStyle().setStyleProperty(
0794:                            ElementStyleKeys.BORDER_RIGHT_WIDTH,
0795:                            Float.valueOf((float) reportElement
0796:                                    .getElementBorder().getRightSide()
0797:                                    .getWidth()));
0798:                    element.getStyle().setStyleProperty(
0799:                            ElementStyleKeys.BORDER_RIGHT_STYLE,
0800:                            getBorderStyle(reportElement.getElementBorder()
0801:                                    .getRightSide().getType()));
0802:
0803:                    element.getStyle().setStyleProperty(
0804:                            ElementStyleKeys.BORDER_BOTTOM_COLOR,
0805:                            reportElement.getElementBorder().getBottomSide()
0806:                                    .getColor());
0807:                    element.getStyle().setStyleProperty(
0808:                            ElementStyleKeys.BORDER_BOTTOM_WIDTH,
0809:                            Float.valueOf((float) reportElement
0810:                                    .getElementBorder().getBottomSide()
0811:                                    .getWidth()));
0812:                    element.getStyle().setStyleProperty(
0813:                            ElementStyleKeys.BORDER_BOTTOM_STYLE,
0814:                            getBorderStyle(reportElement.getElementBorder()
0815:                                    .getBottomSide().getType()));
0816:
0817:                    element.getStyle().setStyleProperty(
0818:                            ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS,
0819:                            reportElement.getElementBorder().getTopRightEdge()
0820:                                    .getRadii());
0821:                    element.getStyle().setStyleProperty(
0822:                            ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS,
0823:                            reportElement.getElementBorder()
0824:                                    .getBottomLeftEdge().getRadii());
0825:                    element.getStyle().setStyleProperty(
0826:                            ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS,
0827:                            reportElement.getElementBorder()
0828:                                    .getBottomRightEdge().getRadii());
0829:                }
0830:
0831:                element.getStyle().setStyleProperty(
0832:                        ElementStyleKeys.BORDER_BREAK_COLOR,
0833:                        reportElement.getElementBorder().getBreakSide()
0834:                                .getColor());
0835:                element.getStyle().setStyleProperty(
0836:                        ElementStyleKeys.BORDER_BREAK_WIDTH,
0837:                        Float.valueOf((float) reportElement.getElementBorder()
0838:                                .getBreakSide().getWidth()));
0839:                element.getStyle().setStyleProperty(
0840:                        ElementStyleKeys.BORDER_BREAK_STYLE,
0841:                        getBorderStyle(reportElement.getElementBorder()
0842:                                .getBreakSide().getType()));
0843:            }
0844:
0845:            @NotNull
0846:            private BorderStyle getBorderStyle(@NotNull
0847:            ElementBorderDefinition.BorderType borderType) {
0848:                switch (borderType) {
0849:                case DASHED:
0850:                    return BorderStyle.DASHED;
0851:                case DOT_DASH:
0852:                    return BorderStyle.DOT_DASH;
0853:                case DOT_DOT_DASH:
0854:                    return BorderStyle.DOT_DOT_DASH;
0855:                case DOTTED:
0856:                    return BorderStyle.DOTTED;
0857:                case DOUBLE:
0858:                    return BorderStyle.DOUBLE;
0859:                case GROOVE:
0860:                    return BorderStyle.GROOVE;
0861:                case HIDDEN:
0862:                    return BorderStyle.HIDDEN;
0863:                case INSET:
0864:                    return BorderStyle.INSET;
0865:                case NONE:
0866:                    return BorderStyle.NONE;
0867:                case OUTSET:
0868:                    return BorderStyle.OUTSET;
0869:                case RIDGE:
0870:                    return BorderStyle.RIDGE;
0871:                case SOLID:
0872:                    return BorderStyle.SOLID;
0873:                case WAVE:
0874:                    return BorderStyle.WAVE;
0875:                }
0876:                return BorderStyle.NONE;
0877:            }
0878:
0879:            @NotNull
0880:            public Object visit(@Nullable
0881:            Object freeParent, @NotNull
0882:            MessageFieldReportElement messageFieldReportElement)
0883:                    throws ReportCreationException {
0884:                try {
0885:                    MessageFieldElementFactory messageFieldElementFactory = new MessageFieldElementFactory();
0886:                    messageFieldElementFactory
0887:                            .setFormatString(messageFieldReportElement
0888:                                    .getFormatString());
0889:                    messageFieldElementFactory
0890:                            .setNullString(messageFieldReportElement
0891:                                    .getNullString());
0892:                    // MARKED formula missing in factory?
0893:
0894:                    applyTextFieldValues(messageFieldElementFactory,
0895:                            messageFieldReportElement);
0896:                    applyElementValues(messageFieldElementFactory,
0897:                            messageFieldReportElement);
0898:
0899:                    return addTextElementToBand(freeParent,
0900:                            messageFieldReportElement,
0901:                            messageFieldElementFactory);
0902:                } catch (RuntimeException e) {
0903:                    throw new ReportCreationException("Unknown error occured",
0904:                            messageFieldReportElement, e);
0905:                }
0906:            }
0907:
0908:            @NotNull
0909:            public Object visit(@Nullable
0910:            Object freeParent, @NotNull
0911:            NumberFieldReportElement numberFieldReportElement)
0912:                    throws ReportCreationException {
0913:                try {
0914:                    NumberFieldElementFactory numberFieldElementFactory = new NumberFieldElementFactory();
0915:                    numberFieldElementFactory
0916:                            .setFieldname(numberFieldReportElement
0917:                                    .getFieldName());
0918:                    numberFieldElementFactory
0919:                            .setNullString(numberFieldReportElement
0920:                                    .getNullString());
0921:                    numberFieldElementFactory
0922:                            .setFormat(numberFieldReportElement.getFormat());
0923:                    numberFieldElementFactory
0924:                            .setExcelCellFormat(numberFieldReportElement
0925:                                    .getExcelNumberFormat());
0926:                    numberFieldElementFactory.setFormula(""
0927:                            .equals(numberFieldReportElement.getFormula()
0928:                                    .getText().trim()) ? null
0929:                            : numberFieldReportElement.getFormula().getText());
0930:
0931:                    applyTextFieldValues(numberFieldElementFactory,
0932:                            numberFieldReportElement);
0933:                    applyElementValues(numberFieldElementFactory,
0934:                            numberFieldReportElement);
0935:
0936:                    return addTextElementToBand(freeParent,
0937:                            numberFieldReportElement, numberFieldElementFactory);
0938:                } catch (RuntimeException e) {
0939:                    throw new ReportCreationException("Unknown error occured",
0940:                            numberFieldReportElement, e);
0941:                }
0942:            }
0943:
0944:            @NotNull
0945:            public Object visit(@Nullable
0946:            Object freeParent, @NotNull
0947:            ReportGroups reportGroups) throws ReportCreationException {
0948:                try {
0949:                    return freeParent;
0950:                } catch (RuntimeException e) {
0951:                    throw new ReportCreationException("Unknown error occured",
0952:                            reportGroups, e);
0953:                }
0954:            }
0955:
0956:            @NotNull
0957:            public Object visit(@Nullable
0958:            Object freeParent, @NotNull
0959:            LineReportElement lineReportElement) throws ReportCreationException {
0960:                try {
0961:                    Band band = (Band) freeParent;
0962:                    Rectangle2D.Double rect = lineReportElement.getRectangle();
0963:
0964:                    Line2D line2D;
0965:                    Rectangle2D.Double bounds;
0966:
0967:                    if (lineReportElement.getDirection() == LineDirection.HORIZONTAL) {
0968:                        double x1 = 0;
0969:                        double y1 = rect.getHeight() / 2;
0970:                        double x2 = rect.getWidth();
0971:                        double y2 = rect.getHeight() / 2;
0972:
0973:                        bounds = lineReportElement.getRectangle();
0974:                        line2D = new Line2D.Double(x1, y1, x2, y2);
0975:                    } else {
0976:                        double x1 = rect.getWidth() / 2;
0977:                        double y1 = 0;
0978:                        double x2 = rect.getWidth() / 2;
0979:                        double y2 = rect.getHeight();
0980:
0981:                        bounds = lineReportElement.getRectangle();
0982:                        line2D = new Line2D.Double(x1, y1, x2, y2);
0983:                    }
0984:                    ShapeElement shapeElement = StaticShapeElementFactory
0985:                            .createShapeElement(lineReportElement.getName(),
0986:                                    bounds, lineReportElement
0987:                                            .getLineDefinition().getColor(),
0988:                                    lineReportElement.getLineDefinition()
0989:                                            .getBasicStroke(), line2D, true,
0990:                                    false, true);
0991:                    shapeElement.setDynamicContent(false);
0992:                    addStyleExpressions(shapeElement, lineReportElement);
0993:                    band.addElement(shapeElement);
0994:
0995:                    return shapeElement;
0996:                } catch (RuntimeException e) {
0997:                    throw new ReportCreationException("Unknown error occured",
0998:                            lineReportElement, e);
0999:                }
1000:            }
1001:
1002:            @NotNull
1003:            public Object visit(@Nullable
1004:            Object freeParent, @NotNull
1005:            RectangleReportElement rectangleReportElement)
1006:                    throws ReportCreationException {
1007:                try {
1008:                    Band band = (Band) freeParent;
1009:
1010:                    Band helperBand = new Band();
1011:                    helperBand.getStyle().setStyleProperty(
1012:                            StaticLayoutManager.ABSOLUTE_POS,
1013:                            rectangleReportElement.getPosition());
1014:                    helperBand.setMinimumSize(rectangleReportElement
1015:                            .getMinimumSize());
1016:                    helperBand.setMaximumSize(new DoubleDimension(
1017:                            rectangleReportElement.getMinimumSize().getWidth(),
1018:                            Integer.MAX_VALUE));
1019:                    helperBand.setName(rectangleReportElement.getName());
1020:
1021:                    if (rectangleReportElement.getArcWidth() > 0
1022:                            && rectangleReportElement.getArcHeight() > 0) {
1023:                        RoundRectangle2D.Double roundRect = new RoundRectangle2D.Double(
1024:                                0, 0, -100, -100, rectangleReportElement
1025:                                        .getArcWidth(), rectangleReportElement
1026:                                        .getArcHeight());
1027:
1028:                        if (rectangleReportElement.isFill()) {
1029:                            ShapeElement shapeElement = StaticShapeElementFactory
1030:                                    .createRoundRectangleShapeElement(
1031:                                            rectangleReportElement.getName()
1032:                                                    + ".fill",
1033:                                            rectangleReportElement.getColor(),
1034:                                            rectangleReportElement
1035:                                                    .getBorderDefinition()
1036:                                                    .getBasicStroke(),
1037:                                            roundRect, false,
1038:                                            rectangleReportElement.isFill());// NON-NLS
1039:                            addStyleExpressions(shapeElement,
1040:                                    rectangleReportElement);
1041:                            helperBand.addElement(shapeElement);
1042:                        }
1043:                        if (rectangleReportElement.isDrawBorder()) {
1044:                            ShapeElement borderShape = StaticShapeElementFactory
1045:                                    .createRoundRectangleShapeElement(
1046:                                            rectangleReportElement.getName()
1047:                                                    + ".border",
1048:                                            rectangleReportElement
1049:                                                    .getBorderDefinition()
1050:                                                    .getColor(),
1051:                                            rectangleReportElement
1052:                                                    .getBorderDefinition()
1053:                                                    .getBasicStroke(),
1054:                                            roundRect, true, false);// NON-NLS
1055:                            addStyleExpressions(borderShape,
1056:                                    rectangleReportElement);
1057:                            helperBand.addElement(borderShape);
1058:                        }
1059:                    } else {
1060:                        Rectangle2D.Double rect = new Rectangle2D.Double(0, 0,
1061:                                -100, -100);
1062:                        if (rectangleReportElement.isFill()) {
1063:                            ShapeElement shapeElement = StaticShapeElementFactory
1064:                                    .createRectangleShapeElement(
1065:                                            rectangleReportElement.getName()
1066:                                                    + ".fill",
1067:                                            rectangleReportElement.getColor(),
1068:                                            rectangleReportElement
1069:                                                    .getBorderDefinition()
1070:                                                    .getBasicStroke(), rect,
1071:                                            false, rectangleReportElement
1072:                                                    .isFill());// NON-NLS
1073:                            addStyleExpressions(shapeElement,
1074:                                    rectangleReportElement);
1075:                            helperBand.addElement(shapeElement);
1076:                        }
1077:                        if (rectangleReportElement.isDrawBorder()) {
1078:                            ShapeElement borderShape = StaticShapeElementFactory
1079:                                    .createRectangleShapeElement(
1080:                                            rectangleReportElement.getName()
1081:                                                    + ".border",
1082:                                            rectangleReportElement
1083:                                                    .getBorderDefinition()
1084:                                                    .getColor(),
1085:                                            rectangleReportElement
1086:                                                    .getBorderDefinition()
1087:                                                    .getBasicStroke(), rect,
1088:                                            true, false);// NON-NLS
1089:                            addStyleExpressions(borderShape,
1090:                                    rectangleReportElement);
1091:                            helperBand.addElement(borderShape);
1092:                        }
1093:                    }
1094:
1095:                    addStyleExpressions(helperBand, rectangleReportElement);
1096:                    band.addElement(helperBand);
1097:                    return helperBand;
1098:                } catch (RuntimeException e) {
1099:                    throw new ReportCreationException("Unknown error occured",
1100:                            rectangleReportElement, e);
1101:                }
1102:            }
1103:
1104:            @NotNull
1105:            public Object visit(@Nullable
1106:            Object freeParent, @NotNull
1107:            EllipseReportElement ellipseReportElement)
1108:                    throws ReportCreationException {
1109:                try {
1110:                    Band band = (Band) freeParent;
1111:
1112:                    Band helperBand = new Band();
1113:
1114:                    // if (ellipseReportElement.isKeepAspect())
1115:                    // {
1116:                    // Rectangle2D.Double rect = new Rectangle2D.Double(ellipseReportElement.getPosition().x, ellipseReportElement.getPosition().y, ellipseReportElement.getMinimumSize().getWidth(), ellipseReportElement.getMinimumSize().getHeight());
1117:                    // double side = Math.min(rect.width, rect.height);
1118:                    // Point2D.Double pos = new Point2D.Double(rect.x + rect.width / 2 - side / 2, rect.y + rect.height / 2 - side / 2);
1119:                    // helperBand.getStyle().setStyleProperty(StaticLayoutManager.ABSOLUTE_POS, pos);
1120:                    // helperBand.setMinimumSize(new DoubleDimension(side, side));
1121:                    // helperBand.setMaximumSize(new DoubleDimension(side, Integer.MAX_VALUE));
1122:                    // helperBand.setName(ellipseReportElement.getName());
1123:                    // }
1124:                    // else
1125:                    {
1126:                        helperBand.getStyle().setStyleProperty(
1127:                                StaticLayoutManager.ABSOLUTE_POS,
1128:                                ellipseReportElement.getPosition());
1129:                        helperBand.setMinimumSize(ellipseReportElement
1130:                                .getMinimumSize());
1131:                        helperBand.setMaximumSize(new DoubleDimension(
1132:                                ellipseReportElement.getMinimumSize()
1133:                                        .getWidth(), Integer.MAX_VALUE));
1134:                        helperBand.setName(ellipseReportElement.getName());
1135:                    }
1136:
1137:                    Ellipse2D.Double ellipse = new Ellipse2D.Double(0, 0, -100,
1138:                            -100);
1139:
1140:                    ShapeElement shapeElement = StaticShapeElementFactory
1141:                            .createEllipseShapeElement(ellipseReportElement
1142:                                    .getName()
1143:                                    + ".fill", ellipseReportElement.getColor(),
1144:                                    ellipseReportElement.getBorderDefinition()
1145:                                            .getBasicStroke(), ellipse, false,
1146:                                    ellipseReportElement.isFill());// NON-NLS
1147:                    addStyleExpressions(shapeElement, ellipseReportElement);
1148:                    helperBand.addElement(shapeElement);
1149:                    if (ellipseReportElement.isDrawBorder()) {
1150:                        ShapeElement borderShape = StaticShapeElementFactory
1151:                                .createEllipseShapeElement(ellipseReportElement
1152:                                        .getName()
1153:                                        + ".border", ellipseReportElement
1154:                                        .getBorderDefinition().getColor(),
1155:                                        ellipseReportElement
1156:                                                .getBorderDefinition()
1157:                                                .getBasicStroke(), ellipse,
1158:                                        true, false);// NON-NLS
1159:                        addStyleExpressions(borderShape, ellipseReportElement);
1160:                        helperBand.addElement(borderShape);
1161:                    }
1162:
1163:                    addStyleExpressions(helperBand, ellipseReportElement);
1164:                    band.addElement(helperBand);
1165:                    return helperBand;
1166:                } catch (RuntimeException e) {
1167:                    throw new ReportCreationException("Unknown error occured",
1168:                            ellipseReportElement, e);
1169:                }
1170:            }
1171:
1172:            @NotNull
1173:            public Object visit(@Nullable
1174:            Object freeParent, @NotNull
1175:            StaticImageReportElement staticImageReportElement)
1176:                    throws ReportCreationException {
1177:                try {
1178:                    Band band = (Band) freeParent;
1179:                    ImageElement imageElement = StaticImageURLElementFactory
1180:                            .createImageElement(staticImageReportElement
1181:                                    .getName(), staticImageReportElement
1182:                                    .getRectangle(), staticImageReportElement
1183:                                    .getUrl(), true, staticImageReportElement
1184:                                    .isKeepAspect());
1185:                    addStyleExpressions(imageElement, staticImageReportElement);
1186:                    band.addElement(imageElement);
1187:                    return imageElement;
1188:                } catch (RuntimeException e) {
1189:                    throw new ReportCreationException("Unknown error occured",
1190:                            staticImageReportElement, e);
1191:                }
1192:            }
1193:
1194:            @NotNull
1195:            public Object visit(@Nullable
1196:            Object freeParent, @NotNull
1197:            ImageFieldReportElement imageFieldReportElement)
1198:                    throws ReportCreationException {
1199:                try {
1200:                    Band band = (Band) freeParent;
1201:                    ImageFieldElementFactory imageFieldElementFactory = new ImageFieldElementFactory();
1202:                    imageFieldElementFactory.setName(imageFieldReportElement
1203:                            .getName());
1204:                    imageFieldElementFactory
1205:                            .setAbsolutePosition(new Point2D.Double(
1206:                                    imageFieldReportElement.getRectangle()
1207:                                            .getX(), imageFieldReportElement
1208:                                            .getRectangle().getY()));
1209:                    imageFieldElementFactory.setMinimumSize(new FloatDimension(
1210:                            (float) imageFieldReportElement.getRectangle()
1211:                                    .getWidth(),
1212:                            (float) imageFieldReportElement.getRectangle()
1213:                                    .getHeight()));
1214:                    imageFieldElementFactory.setScale(Boolean.TRUE);
1215:                    imageFieldElementFactory.setKeepAspectRatio(Boolean
1216:                            .valueOf(imageFieldReportElement.isKeepAspect()));
1217:                    imageFieldElementFactory
1218:                            .setFieldname(imageFieldReportElement
1219:                                    .getFieldName());
1220:                    imageFieldElementFactory.setFormula(""
1221:                            .equals(imageFieldReportElement.getFormula()
1222:                                    .getText().trim()) ? null
1223:                            : imageFieldReportElement.getFormula().getText());
1224:
1225:                    ImageElement imageElement = (ImageElement) imageFieldElementFactory
1226:                            .createElement();
1227:                    addStyleExpressions(imageElement, imageFieldReportElement);
1228:                    band.addElement(imageElement);
1229:                    return imageElement;
1230:                } catch (RuntimeException e) {
1231:                    throw new ReportCreationException("Unknown error occured",
1232:                            imageFieldReportElement, e);
1233:                }
1234:            }
1235:
1236:            @NotNull
1237:            public Object visit(@Nullable
1238:            Object freeParent, @NotNull
1239:            ImageURLFieldReportElement imageURLFieldReportElement)
1240:                    throws ReportCreationException {
1241:                try {
1242:                    Band band = (Band) freeParent;
1243:                    ImageURLFieldElementFactory imageFieldElementFactory = new ImageURLFieldElementFactory();
1244:                    imageFieldElementFactory.setName(imageURLFieldReportElement
1245:                            .getName());
1246:                    imageFieldElementFactory
1247:                            .setAbsolutePosition(new Point2D.Double(
1248:                                    imageURLFieldReportElement.getRectangle()
1249:                                            .getX(), imageURLFieldReportElement
1250:                                            .getRectangle().getY()));
1251:                    imageFieldElementFactory.setMinimumSize(new FloatDimension(
1252:                            (float) imageURLFieldReportElement.getRectangle()
1253:                                    .getWidth(),
1254:                            (float) imageURLFieldReportElement.getRectangle()
1255:                                    .getHeight()));
1256:                    imageFieldElementFactory.setScale(Boolean.TRUE);
1257:                    imageFieldElementFactory
1258:                            .setKeepAspectRatio(Boolean
1259:                                    .valueOf(imageURLFieldReportElement
1260:                                            .isKeepAspect()));
1261:                    imageFieldElementFactory
1262:                            .setFieldname(imageURLFieldReportElement
1263:                                    .getFieldName());
1264:                    imageFieldElementFactory
1265:                            .setFormula("".equals(imageURLFieldReportElement
1266:                                    .getFormula().getText().trim()) ? null
1267:                                    : imageURLFieldReportElement.getFormula()
1268:                                            .getText());
1269:
1270:                    ImageElement imageElement = (ImageElement) imageFieldElementFactory
1271:                            .createElement();
1272:                    addStyleExpressions(imageElement,
1273:                            imageURLFieldReportElement);
1274:                    band.addElement(imageElement);
1275:                    return imageElement;
1276:                } catch (RuntimeException e) {
1277:                    throw new ReportCreationException("Unknown error occured",
1278:                            imageURLFieldReportElement, e);
1279:                }
1280:            }
1281:
1282:            @Nullable
1283:            public Object visit(@Nullable
1284:            Object freeParent, @NotNull
1285:            AnchorFieldReportElement anchorFieldReportElement)
1286:                    throws ReportCreationException {
1287:                try {
1288:                    Band band = (Band) freeParent;
1289:                    AnchorFieldElementFactory anchorFieldElementFactory = new AnchorFieldElementFactory();
1290:                    anchorFieldElementFactory.setName(anchorFieldReportElement
1291:                            .getName());
1292:                    anchorFieldElementFactory
1293:                            .setFieldname(anchorFieldReportElement
1294:                                    .getFieldName());
1295:                    anchorFieldElementFactory
1296:                            .setAbsolutePosition(new Point2D.Double(
1297:                                    anchorFieldReportElement.getRectangle()
1298:                                            .getX(), anchorFieldReportElement
1299:                                            .getRectangle().getY()));
1300:                    anchorFieldElementFactory
1301:                            .setMinimumSize(new FloatDimension(
1302:                                    (float) anchorFieldReportElement
1303:                                            .getRectangle().getWidth(),
1304:                                    (float) anchorFieldReportElement
1305:                                            .getRectangle().getHeight()));
1306:                    Element element = anchorFieldElementFactory.createElement();
1307:                    band.addElement(element);
1308:                    return element;
1309:                } catch (RuntimeException e) {
1310:                    throw new ReportCreationException("Unknown error occured",
1311:                            anchorFieldReportElement, e);
1312:                }
1313:            }
1314:
1315:            @NotNull
1316:            public Object visit(@Nullable
1317:            Object freeParent, @NotNull
1318:            DrawableFieldReportElement drawableFieldReportElement)
1319:                    throws ReportCreationException {
1320:                try {
1321:                    Band band = (Band) freeParent;
1322:                    DrawableFieldElementFactory factory = new DrawableFieldElementFactory();
1323:                    factory.setFieldname(drawableFieldReportElement
1324:                            .getFieldName());
1325:                    factory
1326:                            .setFormula("".equals(drawableFieldReportElement
1327:                                    .getFormula().getText().trim()) ? null
1328:                                    : drawableFieldReportElement.getFormula()
1329:                                            .getText());
1330:                    factory.setName(drawableFieldReportElement.getName());
1331:                    factory.setAbsolutePosition(new Point2D.Double(
1332:                            drawableFieldReportElement.getPosition().getX(),
1333:                            drawableFieldReportElement.getPosition().getY()));
1334:                    factory.setMinimumSize(new FloatDimension(
1335:                            (float) drawableFieldReportElement.getMinimumSize()
1336:                                    .getWidth(),
1337:                            (float) drawableFieldReportElement.getMinimumSize()
1338:                                    .getHeight()));
1339:
1340:                    Element element = factory.createElement();
1341:
1342:                    addStyleExpressions(element, drawableFieldReportElement);
1343:                    band.addElement(element);
1344:                    return element;
1345:                } catch (RuntimeException e) {
1346:                    throw new ReportCreationException("Unknown error occured",
1347:                            drawableFieldReportElement, e);
1348:                }
1349:            }
1350:
1351:            @NotNull
1352:            public Object visit(@Nullable
1353:            Object parent, @NotNull
1354:            DataSetsReportElement dataSetsReportElement)
1355:                    throws ReportCreationException {
1356:                try {
1357:                    if (!dataSetsReportElement.getChildren().isEmpty()) {
1358:                        multiDataFactory = new MultiDataFactory();
1359:                        jFreeReport.setDataFactory(multiDataFactory);
1360:                    }
1361:                    return parent;
1362:                } catch (RuntimeException e) {
1363:                    throw new ReportCreationException("Unknown error occured",
1364:                            dataSetsReportElement, e);
1365:                }
1366:            }
1367:
1368:            @NotNull
1369:            public Object visit(@Nullable
1370:            Object parent, @NotNull
1371:            PropertiesDataSetReportElement propertiesDataSetReportElement)
1372:                    throws ReportCreationException {
1373:                try {
1374:                    TreeSet<PropertyInfo> properties = propertiesDataSetReportElement
1375:                            .getProperties();
1376:                    for (PropertyInfo propertyInfo : properties) {
1377:                        jFreeReport.setProperty(propertyInfo.getKey(),
1378:                                propertyInfo.getValue());
1379:                    }
1380:                    return jFreeReport;
1381:                } catch (RuntimeException e) {
1382:                    throw new ReportCreationException("Unknown error occured",
1383:                            propertiesDataSetReportElement, e);
1384:                }
1385:            }
1386:
1387:            @NotNull
1388:            public Object visit(@Nullable
1389:            Object parent, @NotNull
1390:            StaticFactoryDataSetReportElement staticFactoryDataSetReportElement)
1391:                    throws ReportCreationException {
1392:                try {
1393:                    jFreeReport.setDataFactory(new StaticDataFactory());
1394:                    jFreeReport.setQuery(staticFactoryDataSetReportElement
1395:                            .getQuery());
1396:                    for (PropertyInfo parameter : staticFactoryDataSetReportElement
1397:                            .getParameters()) {
1398:                        jFreeReport.setProperty(parameter.getKey(), parameter
1399:                                .getValue());
1400:                    }
1401:                    return jFreeReport;
1402:                } catch (RuntimeException e) {
1403:                    throw new ReportCreationException("Unknown error occured",
1404:                            staticFactoryDataSetReportElement, e);
1405:                }
1406:            }
1407:
1408:            @Nullable
1409:            public Object visit(@Nullable
1410:            Object parent, @NotNull
1411:            MultiDataSetReportElement multiDataSetReportElement)
1412:                    throws ReportCreationException {
1413:                if (multiDataSetReportElement.getConnectionType() == MultiDataSetReportElement.ConnectionType.JNDI) {
1414:                    final JNDISource jndiSource = multiDataSetReportElement
1415:                            .getSelectedJNDIDataSource();
1416:                    final String mondrianCubeDefinitionFile = multiDataSetReportElement
1417:                            .getMondrianCubeDefinitionFile();
1418:                    MultiDataFactory multiDataFactory = this .multiDataFactory;
1419:                    if (multiDataFactory != null && jndiSource != null) {
1420:                        if (!StringUtils.isEmpty(mondrianCubeDefinitionFile)) {
1421:                            ArrayList<Query> queries = multiDataSetReportElement
1422:                                    .getQueries();
1423:                            if (!queries.isEmpty()) {
1424:                                try {
1425:                                    MondrianDataFactory mdxDataFactory = new MondrianDataFactory(
1426:                                            jndiSource,
1427:                                            multiDataSetReportElement
1428:                                                    .getQueryName(),
1429:                                            mondrianCubeDefinitionFile,
1430:                                            multiDataSetReportElement
1431:                                                    .getQueries().get(0)
1432:                                                    .getQuery(),
1433:                                            preview
1434:                                                    && multiDataSetReportElement
1435:                                                            .isLimitPreviewRows(),
1436:                                            multiDataSetReportElement
1437:                                                    .getMaxPreviewRows());
1438:                                    multiDataFactory
1439:                                            .addExtendedDataFactory(mdxDataFactory);
1440:                                } catch (Exception e) {
1441:                                    if (LOG.isLoggable(Level.FINE))
1442:                                        LOG.log(Level.FINE,
1443:                                                "JFreeReportVisitor.visit ", e);
1444:                                }
1445:                            }
1446:                        } else {
1447:                            ArrayList<Query> queries = multiDataSetReportElement
1448:                                    .getQueries();
1449:                            if (!queries.isEmpty()) {
1450:                                if (preview) {
1451:                                    PreviewableSQLReportDataFactory sqlReportDataFactory = new PreviewableSQLReportDataFactory(
1452:                                            new ConnectionProvider() {
1453:                                                @NotNull
1454:                                                public Connection getConnection()
1455:                                                        throws SQLException {
1456:                                                    try {
1457:                                                        return JDBCClassLoader
1458:                                                                .getConnection(
1459:                                                                        jndiSource
1460:                                                                                .getDriverClass(),
1461:                                                                        jndiSource
1462:                                                                                .getConnectionString(),
1463:                                                                        jndiSource
1464:                                                                                .getUsername(),
1465:                                                                        jndiSource
1466:                                                                                .getPassword());
1467:                                                    } catch (Exception e) {
1468:                                                        if (LOG
1469:                                                                .isLoggable(Level.FINE))
1470:                                                            LOG
1471:                                                                    .log(
1472:                                                                            Level.FINE,
1473:                                                                            "JFreeReportVisitor.getConnection ",
1474:                                                                            e);
1475:                                                        throw new SQLException(
1476:                                                                e.getMessage());
1477:                                                    }
1478:                                                }
1479:                                            }, multiDataSetReportElement
1480:                                                    .isLimitPreviewRows(),
1481:                                            multiDataSetReportElement
1482:                                                    .getMaxPreviewRows());
1483:                                    Query query = queries.get(0);
1484:                                    sqlReportDataFactory.setQuery(query
1485:                                            .getQueryName(), query.getQuery());
1486:                                    multiDataFactory
1487:                                            .addDataFactory(sqlReportDataFactory);
1488:                                } else {
1489:                                    SQLReportDataFactory sqlReportDataFactory = new SQLReportDataFactory(
1490:                                            new ConnectionProvider() {
1491:                                                @NotNull
1492:                                                public Connection getConnection()
1493:                                                        throws SQLException {
1494:                                                    try {
1495:                                                        return JDBCClassLoader
1496:                                                                .getConnection(
1497:                                                                        jndiSource
1498:                                                                                .getDriverClass(),
1499:                                                                        jndiSource
1500:                                                                                .getConnectionString(),
1501:                                                                        jndiSource
1502:                                                                                .getUsername(),
1503:                                                                        jndiSource
1504:                                                                                .getPassword());
1505:                                                    } catch (Exception e) {
1506:                                                        if (LOG
1507:                                                                .isLoggable(Level.FINE))
1508:                                                            LOG
1509:                                                                    .log(
1510:                                                                            Level.FINE,
1511:                                                                            "JFreeReportVisitor.getConnection ",
1512:                                                                            e);
1513:                                                        throw new SQLException(
1514:                                                                e.getMessage());
1515:                                                    }
1516:                                                }
1517:                                            });
1518:                                    Query query = queries.get(0);
1519:                                    sqlReportDataFactory.setQuery(query
1520:                                            .getQueryName(), query.getQuery());
1521:                                    multiDataFactory
1522:                                            .addDataFactory(sqlReportDataFactory);
1523:                                }
1524:                            }
1525:                        }
1526:                    }
1527:                } else if (multiDataSetReportElement.getConnectionType() == MultiDataSetReportElement.ConnectionType.XQuery) {
1528:                    final String xQueryDataFile = multiDataSetReportElement
1529:                            .getXQueryDataFile();
1530:                    MultiDataFactory multiDataFactory = this .multiDataFactory;
1531:                    if (multiDataFactory != null
1532:                            && !StringUtils.isEmpty(xQueryDataFile)) {
1533:                        ArrayList<Query> queries = multiDataSetReportElement
1534:                                .getQueries();
1535:                        if (!queries.isEmpty()) {
1536:                            try {
1537:                                XPathDataFactory xPathDataFactory = new XPathDataFactory(
1538:                                        multiDataSetReportElement
1539:                                                .getQueryName(),
1540:                                        new File(xQueryDataFile).toURI()
1541:                                                .toURL(),
1542:                                        multiDataSetReportElement.getQueries()
1543:                                                .get(0).getQuery(), preview
1544:                                                && multiDataSetReportElement
1545:                                                        .isLimitPreviewRows(),
1546:                                        multiDataSetReportElement
1547:                                                .getMaxPreviewRows());
1548:                                multiDataFactory
1549:                                        .addExtendedDataFactory(xPathDataFactory);
1550:                            } catch (MalformedURLException e) {
1551:                                if (LOG.isLoggable(Level.FINE))
1552:                                    LOG.log(Level.FINE,
1553:                                            "JFreeReportVisitor.visit ", e);
1554:                            }
1555:                        }
1556:                    }
1557:                } else if (multiDataSetReportElement.getConnectionType() == MultiDataSetReportElement.ConnectionType.MQL) {
1558:                    final String xmiDefinitionFile = multiDataSetReportElement
1559:                            .getXmiDefinitionFile();
1560:                    MultiDataFactory multiDataFactory = this .multiDataFactory;
1561:                    if (multiDataFactory != null && xmiDefinitionFile != null
1562:                            && !StringUtils.isEmpty(xmiDefinitionFile)) {
1563:                        ArrayList<Query> queries = multiDataSetReportElement
1564:                                .getQueries();
1565:                        if (!queries.isEmpty()) {
1566:                            try {
1567:                                Report report = multiDataSetReportElement
1568:                                        .getReport();
1569:                                Locale loc = Locale.getDefault();
1570:                                if (report != null) {
1571:                                    loc = report.getDefaultLocale();
1572:                                }
1573:                                MQLDataFactory mqlDataFactory = new MQLDataFactory(
1574:                                        loc, multiDataSetReportElement
1575:                                                .getQueryName(),
1576:                                        xmiDefinitionFile,
1577:                                        multiDataSetReportElement.getQueries()
1578:                                                .get(0).getQuery(), preview
1579:                                                && multiDataSetReportElement
1580:                                                        .isLimitPreviewRows(),
1581:                                        multiDataSetReportElement
1582:                                                .getMaxPreviewRows());
1583:                                multiDataFactory
1584:                                        .addExtendedDataFactory(mqlDataFactory);
1585:                            } catch (Exception e) {
1586:                                if (LOG.isLoggable(Level.FINE))
1587:                                    LOG.log(Level.FINE,
1588:                                            "JFreeReportVisitor.visit ", e);
1589:                            }
1590:                        }
1591:                    }
1592:                }
1593:                return parent;
1594:            }
1595:
1596:            @NotNull
1597:            public Object visit(@Nullable
1598:            Object freeParent, @NotNull
1599:            ReportGroup reportGroup) throws ReportCreationException {
1600:                try {
1601:                    Group group = new Group();
1602:                    group.setName(reportGroup.getName());
1603:
1604:                    ArrayList<String> groupFields = new ArrayList<String>();
1605:                    addGroupFields(groupFields, reportGroup);
1606:                    for (String groupField : groupFields) {
1607:                        group.addField(groupField);
1608:                    }
1609:                    if (currentJFreeReport != null) {
1610:                        currentJFreeReport.addGroup(group);
1611:                    } else {
1612:                        jFreeReport.addGroup(group);
1613:                    }
1614:                    return group;
1615:                } catch (RuntimeException e) {
1616:                    throw new ReportCreationException("Unknown error occured",
1617:                            reportGroup, e);
1618:                }
1619:            }
1620:
1621:            private void addGroupFields(@NotNull
1622:            ArrayList<String> groupFields, @NotNull
1623:            ReportGroup reportGroup) throws ReportCreationException {
1624:                for (int i = reportGroup.getGroupFields().length - 1; i >= 0; i--) {
1625:                    String s = reportGroup.getGroupFields()[i];
1626:                    groupFields.add(0, s);
1627:                }
1628:
1629:                ReportElement parent = reportGroup.getParent();
1630:                if (parent instanceof  ReportGroup) {
1631:                    addGroupFields(groupFields, (ReportGroup) parent);
1632:                }
1633:            }
1634:
1635:            @NotNull
1636:            public Object visit(@Nullable
1637:            Object freeParent, @NotNull
1638:            ResourceFieldReportElement resourceFieldReportElement)
1639:                    throws ReportCreationException {
1640:                try {
1641:                    ResourceFieldElementFactory textFieldElementFactory = new ResourceFieldElementFactory();
1642:                    textFieldElementFactory
1643:                            .setFieldname(resourceFieldReportElement
1644:                                    .getFieldName());
1645:                    textFieldElementFactory
1646:                            .setNullString(resourceFieldReportElement
1647:                                    .getNullString());
1648:                    textFieldElementFactory
1649:                            .setResourceBase(resourceFieldReportElement
1650:                                    .getResourceBase());
1651:                    textFieldElementFactory
1652:                            .setFormula("".equals(resourceFieldReportElement
1653:                                    .getFormula().getText().trim()) ? null
1654:                                    : resourceFieldReportElement.getFormula()
1655:                                            .getText());
1656:
1657:                    applyTextFieldValues(textFieldElementFactory,
1658:                            resourceFieldReportElement);
1659:                    applyElementValues(textFieldElementFactory,
1660:                            resourceFieldReportElement);
1661:
1662:                    return addTextElementToBand(freeParent,
1663:                            resourceFieldReportElement, textFieldElementFactory);
1664:                } catch (RuntimeException e) {
1665:                    throw new ReportCreationException("Unknown error occured",
1666:                            resourceFieldReportElement, e);
1667:                }
1668:            }
1669:
1670:            @NotNull
1671:            public Object visit(@Nullable
1672:            Object freeParent, @NotNull
1673:            ResourceMessageReportElement resourceMessageReportElement)
1674:                    throws ReportCreationException {
1675:                try {
1676:                    ResourceMessageElementFactory textFieldElementFactory = new ResourceMessageElementFactory();
1677:                    textFieldElementFactory
1678:                            .setFormatKey(resourceMessageReportElement
1679:                                    .getFormatKey());
1680:                    textFieldElementFactory
1681:                            .setNullString(resourceMessageReportElement
1682:                                    .getNullString());
1683:                    textFieldElementFactory
1684:                            .setResourceBase(resourceMessageReportElement
1685:                                    .getResourceBase());
1686:
1687:                    applyTextFieldValues(textFieldElementFactory,
1688:                            resourceMessageReportElement);
1689:                    applyElementValues(textFieldElementFactory,
1690:                            resourceMessageReportElement);
1691:
1692:                    return addTextElementToBand(freeParent,
1693:                            resourceMessageReportElement,
1694:                            textFieldElementFactory);
1695:                } catch (RuntimeException e) {
1696:                    throw new ReportCreationException("Unknown error occured",
1697:                            resourceMessageReportElement, e);
1698:                }
1699:            }
1700:
1701:            @NotNull
1702:            public Object visit(@Nullable
1703:            Object freeParent, @NotNull
1704:            ResourceLabelReportElement resourceLabelReportElement)
1705:                    throws ReportCreationException {
1706:                try {
1707:                    ResourceLabelElementFactory textFieldElementFactory = new ResourceLabelElementFactory();
1708:                    textFieldElementFactory
1709:                            .setResourceKey(resourceLabelReportElement
1710:                                    .getResourceKey());
1711:                    textFieldElementFactory
1712:                            .setNullString(resourceLabelReportElement
1713:                                    .getNullString());
1714:                    textFieldElementFactory
1715:                            .setResourceBase(resourceLabelReportElement
1716:                                    .getResourceBase());
1717:
1718:                    applyTextFieldValues(textFieldElementFactory,
1719:                            resourceLabelReportElement);
1720:                    applyElementValues(textFieldElementFactory,
1721:                            resourceLabelReportElement);
1722:
1723:                    return addTextElementToBand(freeParent,
1724:                            resourceLabelReportElement, textFieldElementFactory);
1725:                } catch (RuntimeException e) {
1726:                    throw new ReportCreationException("Unknown error occured",
1727:                            resourceLabelReportElement, e);
1728:                }
1729:            }
1730:
1731:            @Nullable
1732:            public Object visit(@Nullable
1733:            Object freeParent, @NotNull
1734:            ChartReportElement chartReportElement)
1735:                    throws ReportCreationException {
1736:                try {
1737:                    Band band = (Band) freeParent;
1738:                    DrawableFieldElementFactory factory = new DrawableFieldElementFactory();
1739:                    factory.setFieldname(chartReportElement.getChartFunction()
1740:                            .getName());
1741:                    factory.setName(chartReportElement.getName());
1742:                    factory.setAbsolutePosition(new Point2D.Double(
1743:                            chartReportElement.getPosition().getX(),
1744:                            chartReportElement.getPosition().getY()));
1745:                    factory.setMinimumSize(new FloatDimension(
1746:                            (float) chartReportElement.getMinimumSize()
1747:                                    .getWidth(), (float) chartReportElement
1748:                                    .getMinimumSize().getHeight()));
1749:                    Element element = factory.createElement();
1750:                    band.addElement(element);
1751:
1752:                    if (currentJFreeReport != null) {
1753:                        visit(currentJFreeReport.getExpressions(),
1754:                                chartReportElement.getChartFunction());
1755:                        visit(currentJFreeReport.getExpressions(),
1756:                                chartReportElement.getDataCollectorFunction());
1757:                        visit(currentJFreeReport.getExpressions(),
1758:                                chartReportElement.getDataCollectorFunction2());
1759:                    } else {
1760:                        visit(jFreeReport.getExpressions(), chartReportElement
1761:                                .getChartFunction());
1762:                        visit(jFreeReport.getExpressions(), chartReportElement
1763:                                .getDataCollectorFunction());
1764:                        visit(jFreeReport.getExpressions(), chartReportElement
1765:                                .getDataCollectorFunction2());
1766:                    }
1767:
1768:                    return element;
1769:                } catch (RuntimeException e) {
1770:                    throw new ReportCreationException("Unknown error occured",
1771:                            chartReportElement, e);
1772:                }
1773:            }
1774:
1775:            @NotNull
1776:            public Object visit(@Nullable
1777:            Object freeParent, @NotNull
1778:            TextFieldReportElement textFieldReportElement)
1779:                    throws ReportCreationException {
1780:                try {
1781:                    TextFieldElementFactory textFieldElementFactory = new TextFieldElementFactory();
1782:                    textFieldElementFactory.setFieldname(textFieldReportElement
1783:                            .getFieldName());
1784:                    textFieldElementFactory
1785:                            .setNullString(textFieldReportElement
1786:                                    .getNullString());
1787:                    textFieldElementFactory.setFormula(""
1788:                            .equals(textFieldReportElement.getFormula()
1789:                                    .getText().trim()) ? null
1790:                            : textFieldReportElement.getFormula().getText());
1791:
1792:                    applyTextFieldValues(textFieldElementFactory,
1793:                            textFieldReportElement);
1794:                    applyElementValues(textFieldElementFactory,
1795:                            textFieldReportElement);
1796:
1797:                    return addTextElementToBand(freeParent,
1798:                            textFieldReportElement, textFieldElementFactory);
1799:                } catch (RuntimeException e) {
1800:                    throw new ReportCreationException("Unknown error occured",
1801:                            textFieldReportElement, e);
1802:                }
1803:            }
1804:
1805:            @NotNull
1806:            public Object visit(@Nullable
1807:            Object parent, @NotNull
1808:            ReportFunctionsElement reportFunctionsElement)
1809:                    throws ReportCreationException {
1810:                try {
1811:                    AbstractReportDefinition report = (AbstractReportDefinition) parent;
1812:                    return report.getExpressions();
1813:                } catch (RuntimeException e) {
1814:                    throw new ReportCreationException("Unknown error occured",
1815:                            reportFunctionsElement, e);
1816:                }
1817:            }
1818:
1819:            @Nullable
1820:            public Object visit(@Nullable
1821:            Object parent, @NotNull
1822:            ReportFunctionElement reportFunctionElement)
1823:                    throws ReportCreationException {
1824:                // ExpressionCollection expressionCollection = (ExpressionCollection) parent;
1825:                // Expression freeExpression = ExpressionCreator.createFreeExpression(reportFunctionElement);
1826:                // expressionCollection.add(freeExpression);
1827:
1828:                if (parent instanceof  ExpressionCollection) {
1829:                    ExpressionCollection expressionCollection = (ExpressionCollection) parent;
1830:                    Expression freeExpression = ExpressionRegistry
1831:                            .getInstance().createJFreeReportExpressionInstance(
1832:                                    reportFunctionElement);
1833:                    expressionCollection.add(freeExpression);
1834:                    return freeExpression;
1835:                }
1836:
1837:                return null;
1838:            }
1839:
1840:            @NotNull
1841:            public Object visit(@Nullable
1842:            Object freeParent, @NotNull
1843:            SubReportElement subReportElement) throws ReportCreationException {
1844:                try {
1845:                    AbstractRootLevelBand abstractRootLevelBand = (AbstractRootLevelBand) freeParent;
1846:
1847:                    SubReport subReport = ReportDesignerUtils
1848:                            .getSubReport(subReportElement);
1849:                    JFreeReportVisitor subReportVisitor = new JFreeReportVisitor();
1850:                    if (subReport != null) {
1851:                        subReport.accept(null, subReportVisitor);
1852:
1853:                        org.jfree.report.SubReport jFreeSubReport = subReportVisitor
1854:                                .getSubReport();
1855:
1856:                        if (subReportElement.getQuery() != null
1857:                                && !"".equals(subReportElement.getQuery()
1858:                                        .trim())) {
1859:                            jFreeSubReport
1860:                                    .setQuery(subReportElement.getQuery());
1861:                        }
1862:
1863:                        applySubReportParameters(jFreeSubReport,
1864:                                subReportElement.getParameters());
1865:
1866:                        abstractRootLevelBand.addSubReport(jFreeSubReport);
1867:
1868:                        return jFreeSubReport;
1869:                    }
1870:                } catch (RuntimeException e) {
1871:                    throw new ReportCreationException("Unknown error occured",
1872:                            subReportElement, e);
1873:                } catch (Exception e) {
1874:                    throw new ReportCreationException("Unknown error occured",
1875:                            subReportElement, e);
1876:                }
1877:
1878:                return null;
1879:            }
1880:
1881:            @Nullable
1882:            public Object visit(@Nullable
1883:            Object parent, @NotNull
1884:            SubReportDataElement subReportDataElement)
1885:                    throws ReportCreationException {
1886:                return null;
1887:            }
1888:
1889:            private void applyTextFieldValues(@NotNull
1890:            TextElementFactory textElementFactory, @NotNull
1891:            TextReportElement textReportElement) {
1892:                textElementFactory.setColor(textReportElement.getForeground());
1893:
1894:                textElementFactory.setEmbedFont(Boolean
1895:                        .valueOf(textReportElement.isEmbedFont()));
1896:                String encoding = textReportElement.getEncoding();
1897:                if (encoding == null) {
1898:                    textElementFactory.setEncoding(null);
1899:                } else {
1900:                    textElementFactory
1901:                            .setEncoding("".equals(encoding.trim()) ? null
1902:                                    : encoding);
1903:                }
1904:
1905:                textElementFactory.setFontName(textReportElement.getFont()
1906:                        .getName());
1907:                textElementFactory.setFontSize(Integer
1908:                        .valueOf(textReportElement.getFont().getSize()));
1909:                textElementFactory.setLineHeight(Float
1910:                        .valueOf((float) textReportElement.getLineHeight()));
1911:
1912:                textElementFactory.setBold(Boolean.valueOf((textReportElement
1913:                        .getFont().getStyle() & Font.BOLD) == Font.BOLD));
1914:                textElementFactory.setItalic(Boolean.valueOf((textReportElement
1915:                        .getFont().getStyle() & Font.ITALIC) == Font.ITALIC));
1916:                textElementFactory.setStrikethrough(Boolean
1917:                        .valueOf(textReportElement.isStrikethrough()));
1918:                textElementFactory.setUnderline(Boolean
1919:                        .valueOf(textReportElement.isUnderline()));
1920:
1921:                textElementFactory.setTrimTextContent(Boolean
1922:                        .valueOf(textReportElement.isTrimTextContent()));
1923:                textElementFactory.setWrapText(Boolean
1924:                        .valueOf(textReportElement.isWrapTextInExcel()));
1925:
1926:                textElementFactory
1927:                        .setHorizontalAlignment(getElementAlignment(textReportElement
1928:                                .getHorizontalAlignment()));
1929:                textElementFactory
1930:                        .setVerticalAlignment(getElementAlignment(textReportElement
1931:                                .getVerticalAlignment()));
1932:
1933:                textElementFactory.setReservedLiteral(textReportElement
1934:                        .getReservedLiteral());
1935:            }
1936:
1937:            private void applyElementValues(@NotNull
1938:            ElementFactory elementFactory, @NotNull
1939:            ReportElement reportElement) {
1940:                elementFactory.setName(reportElement.getName());
1941:                elementFactory.setDynamicHeight(Boolean.valueOf(reportElement
1942:                        .isDynamicContent()));
1943:                elementFactory.setAbsolutePosition(reportElement.getPosition());
1944:                elementFactory.setMinimumSize(reportElement.getMinimumSize());
1945:
1946:                if (reportElement.getMaximumSize().getHeight() > 0.000001
1947:                        && reportElement.getMaximumSize().getWidth() > 0.000001) {
1948:                    elementFactory.setMaximumSize(reportElement
1949:                            .getMaximumSize());
1950:                }
1951:                if (reportElement.getPreferredSize().getHeight() > 0.000001
1952:                        && reportElement.getPreferredSize().getWidth() > 0.000001) {
1953:                    elementFactory.setPreferredSize(reportElement
1954:                            .getPreferredSize());
1955:                }
1956:            }
1957:
1958:            @NotNull
1959:            private ElementAlignment getElementAlignment(@Nullable
1960:            TextReportElementHorizontalAlignment horizontalAlignment) {
1961:                if (horizontalAlignment == null) {
1962:                    return ElementAlignment.LEFT;
1963:                }
1964:
1965:                switch (horizontalAlignment) {
1966:                case LEFT:
1967:                    return ElementAlignment.LEFT;
1968:                case CENTER:
1969:                    return ElementAlignment.CENTER;
1970:                case RIGHT:
1971:                    return ElementAlignment.RIGHT;
1972:                default:
1973:                    if (LOG.isLoggable(Level.SEVERE))
1974:                        LOG.log(Level.SEVERE,
1975:                                "JFreeReportVisitor.getElementAlignment horizontalAlignment = "
1976:                                        + horizontalAlignment);
1977:                    return ElementAlignment.LEFT;
1978:                }
1979:            }
1980:
1981:            @NotNull
1982:            private ElementAlignment getElementAlignment(@Nullable
1983:            TextReportElementVerticalAlignment verticalAlignment) {
1984:                if (verticalAlignment == null) {
1985:                    return ElementAlignment.TOP;
1986:                }
1987:
1988:                switch (verticalAlignment) {
1989:                case TOP:
1990:                    return ElementAlignment.TOP;
1991:                case MIDDLE:
1992:                    return ElementAlignment.MIDDLE;
1993:                case BOTTOM:
1994:                    return ElementAlignment.BOTTOM;
1995:                default:
1996:                    if (LOG.isLoggable(Level.SEVERE))
1997:                        LOG.log(Level.SEVERE,
1998:                                "JFreeReportVisitor.getElementAlignment verticalAlignment = "
1999:                                        + verticalAlignment);
2000:                    return ElementAlignment.TOP;
2001:                }
2002:            }
2003:
2004:        }
w_w__w.j__a__v___a___2___s__.__c___om | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.