001: /**
002: * ========================================
003: * JFreeReport : a free Java report library
004: * ========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * $Id: ReportContextImpl.java 3525 2007-10-16 11:43:48Z tmorgner $
027: * ------------
028: * (C) Copyright 2000-2005, by Object Refinery Limited.
029: * (C) Copyright 2005-2007, by Pentaho Corporation.
030: */package org.jfree.report.data;
031:
032: import java.util.HashMap;
033:
034: import org.jfree.formula.FormulaContext;
035: import org.jfree.report.flow.ReportContext;
036: import org.jfree.report.flow.ReportStructureRoot;
037: import org.jfree.report.flow.layoutprocessor.LayoutControllerFactory;
038: import org.jfree.report.i18n.ResourceBundleFactory;
039:
040: /**
041: * Creation-Date: 20.11.2006, 12:19:34
042: *
043: * @author Thomas Morgner
044: */
045: public class ReportContextImpl implements ReportContext {
046: private static class DataCarrier {
047: private boolean locked;
048: private Object value;
049:
050: private DataCarrier(final Object value) {
051: this .value = value;
052: }
053:
054: public void lock() {
055: locked = true;
056: }
057:
058: public boolean isLocked() {
059: return locked;
060: }
061:
062: public Object getValue() {
063: return value;
064: }
065:
066: public void setValue(final Object value) {
067: this .value = value;
068: }
069: }
070:
071: private HashMap backend;
072: private String exportDescriptor;
073: private FormulaContext formulaContext;
074: private LayoutControllerFactory layoutControllerFactory;
075: private ResourceBundleFactory resourceBundleFactory;
076: private ReportStructureRoot reportStructureRoot;
077:
078: public ReportContextImpl() {
079: backend = new HashMap();
080: }
081:
082: public void setReportStructureRoot(
083: final ReportStructureRoot reportStructureRoot) {
084: this .reportStructureRoot = reportStructureRoot;
085: }
086:
087: public ReportStructureRoot getReportStructureRoot() {
088: return reportStructureRoot;
089: }
090:
091: public String getExportDescriptor() {
092: return exportDescriptor;
093: }
094:
095: public void setExportDescriptor(final String exportDescriptor) {
096: this .exportDescriptor = exportDescriptor;
097: }
098:
099: public FormulaContext getFormulaContext() {
100: return formulaContext;
101: }
102:
103: public void setFormulaContext(final FormulaContext formulaContext) {
104: this .formulaContext = formulaContext;
105: }
106:
107: public LayoutControllerFactory getLayoutControllerFactory() {
108: return layoutControllerFactory;
109: }
110:
111: public void setLayoutControllerFactory(
112: final LayoutControllerFactory layoutControllerFactory) {
113: this .layoutControllerFactory = layoutControllerFactory;
114: }
115:
116: public void setAttribute(final Object key, final Object value) {
117: final DataCarrier dc = (DataCarrier) backend.get(key);
118: if (dc == null) {
119: if (value == null) {
120: return;
121: }
122:
123: final DataCarrier ndc = new DataCarrier(value);
124: backend.put(key, ndc);
125: return;
126: }
127:
128: if (dc.isLocked()) {
129: throw new IllegalStateException("Context-Entry is locked.");
130: }
131: dc.setValue(value);
132: }
133:
134: public void setSystemAttribute(final Object key, final Object value) {
135: final DataCarrier dc = (DataCarrier) backend.get(key);
136: if (dc == null) {
137: if (value == null) {
138: return;
139: }
140:
141: final DataCarrier ndc = new DataCarrier(value);
142: ndc.lock();
143: backend.put(key, ndc);
144: return;
145: }
146:
147: if (dc.isLocked()) {
148: throw new IllegalStateException("Context-Entry is locked.");
149: }
150: dc.setValue(value);
151: }
152:
153: public Object getAttribute(final Object key) {
154: final DataCarrier dc = (DataCarrier) backend.get(key);
155: if (dc == null) {
156: return null;
157: }
158: return dc.getValue();
159: }
160:
161: public boolean isSystemAttribute(final Object key) {
162: final DataCarrier dc = (DataCarrier) backend.get(key);
163: if (dc == null) {
164: return false;
165: }
166: return dc.isLocked();
167: }
168:
169: public ResourceBundleFactory getResourceBundleFactory() {
170: return resourceBundleFactory;
171: }
172:
173: public void setResourceBundleFactory(
174: final ResourceBundleFactory resourceBundleFactory) {
175: this.resourceBundleFactory = resourceBundleFactory;
176: }
177: }
|