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: }
|