001: /*
002: * Copyright 2006-2007 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
007: *
008: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
009: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
010: * the license for the specific language governing your rights and limitations.
011: *
012: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
013: */
014: package org.pentaho.reportdesigner.lib.common.xml;
015:
016: import org.jetbrains.annotations.NonNls;
017: import org.jetbrains.annotations.NotNull;
018: import org.jetbrains.annotations.Nullable;
019: import org.pentaho.reportdesigner.crm.report.model.FilePath;
020: import org.pentaho.reportdesigner.lib.client.util.DoubleDimension;
021:
022: import java.awt.*;
023: import java.awt.geom.Point2D;
024: import java.awt.geom.Rectangle2D;
025: import java.lang.reflect.Field;
026: import java.net.URL;
027: import java.util.Date;
028: import java.util.HashMap;
029: import java.util.Locale;
030: import java.util.TimeZone;
031: import java.util.logging.Level;
032: import java.util.logging.Logger;
033:
034: /**
035: * User: Martin
036: * Date: 06.02.2006
037: * Time: 13:41:27
038: */
039: public class ObjectConverterFactory {
040: @NonNls
041: @NotNull
042: private static final Logger LOG = Logger
043: .getLogger(ObjectConverterFactory.class.getName());
044:
045: @NotNull
046: private static final ObjectConverterFactory instance = new ObjectConverterFactory();
047:
048: @NotNull
049: public static ObjectConverterFactory getInstance() {
050: return instance;
051: }
052:
053: @NotNull
054: private HashMap<Class<?>, ObjectConverter> converters;
055:
056: @NotNull
057: private DoubleDimensionConverter doubleDimensionConverter;
058: @NotNull
059: private Point2DConverter point2DConverter;
060: @NotNull
061: private Rectangle2DConverter rectangle2DConverter;
062: @NotNull
063: private LocaleConverter localeConverter;
064: @NotNull
065: private ColorConverter colorConverter;
066: @NotNull
067: private URLConverter urlConverter;
068: @NotNull
069: private FontConverter fontConverter;
070: @NotNull
071: private FilePathConverter filePathConverter;
072:
073: private ObjectConverterFactory() {
074: doubleDimensionConverter = new DoubleDimensionConverter();
075: point2DConverter = new Point2DConverter();
076: rectangle2DConverter = new Rectangle2DConverter();
077: localeConverter = new LocaleConverter();
078: colorConverter = new ColorConverter();
079: urlConverter = new URLConverter();
080: fontConverter = new FontConverter();
081: filePathConverter = new FilePathConverter();
082:
083: converters = new HashMap<Class<?>, ObjectConverter>();
084: converters.put(DoubleDimension.class, doubleDimensionConverter);
085: converters.put(Point2D.Double.class, point2DConverter);
086: converters.put(Rectangle2D.Double.class, rectangle2DConverter);
087: converters.put(Locale.class, localeConverter);
088: converters.put(Color.class, colorConverter);
089: converters.put(URL.class, urlConverter);
090: converters.put(FilePath.class, filePathConverter);
091:
092: converters.put(Double.class, new DoubleConverter());
093: converters.put(Double.TYPE, new DoubleConverter());
094: converters.put(Number.class, new DoubleConverter());
095: converters.put(Integer.class, new IntegerConverter());
096: converters.put(Integer.TYPE, new IntegerConverter());
097: converters.put(Float.class, new FloatConverter());
098: converters.put(Float.TYPE, new FloatConverter());
099: converters.put(Boolean.class, new BooleanConverter());
100: converters.put(Boolean.TYPE, new BooleanConverter());
101: converters.put(String.class, new StringConverter());
102: converters.put(Long.class, new LongConverter());
103: converters.put(Long.TYPE, new LongConverter());
104: converters.put(TimeZone.class, new TimeZoneConverter());
105: converters.put(Date.class, new DateConverter());
106: }
107:
108: @NotNull
109: public DoubleDimensionConverter getDoubleDimensionConverter() {
110: return doubleDimensionConverter;
111: }
112:
113: @NotNull
114: public Point2DConverter getPoint2DConverter() {
115: return point2DConverter;
116: }
117:
118: @NotNull
119: public Rectangle2DConverter getRectangle2DConverter() {
120: return rectangle2DConverter;
121: }
122:
123: @NotNull
124: public LocaleConverter getLocaleConverter() {
125: return localeConverter;
126: }
127:
128: @NotNull
129: public ColorConverter getColorConverter() {
130: return colorConverter;
131: }
132:
133: @NotNull
134: public URLConverter getURLConverter(@NotNull
135: XMLContext xmlContext) {
136: return getURLConverter(xmlContext, null);
137: }
138:
139: @NotNull
140: public URLConverter getURLConverter(@NotNull
141: XMLContext xmlContext, @Nullable
142: Field field) {
143: urlConverter.configure(xmlContext, field);
144: return urlConverter;
145: }
146:
147: @NotNull
148: public FilePathConverter getFilePathConverter(@NotNull
149: XMLContext xmlContext) {
150: return getFilePathConverter(xmlContext, null);
151: }
152:
153: @NotNull
154: public FilePathConverter getFilePathConverter(@NotNull
155: XMLContext xmlContext, @Nullable
156: Field field) {
157: filePathConverter.configure(xmlContext, field);
158: return filePathConverter;
159: }
160:
161: @Nullable
162: public ObjectConverter getConverter(@NotNull
163: Class<?> clazz, @Nullable
164: Field field, @NotNull
165: XMLContext xmlContext) {
166: if (clazz.isArray()) {
167: ObjectConverter converter = getConverter(clazz
168: .getComponentType(), field, xmlContext);
169: if (converter == null) {
170: if (LOG.isLoggable(Level.FINE))
171: LOG
172: .log(
173: Level.FINE,
174: "ObjectConverterFactory.getConverter no array converter found for component type "
175: + clazz.getName());
176: return null;
177: }
178: return new ArrayConverter(clazz, converter);
179: } else {
180: ObjectConverter converter = converters.get(clazz);
181: if (converter == null) {
182: if (LOG.isLoggable(Level.FINE))
183: LOG.log(Level.FINE,
184: "ObjectConverterFactory.getConverter no converter found for component type "
185: + clazz.getName());
186: } else {
187: converter.configure(xmlContext, field);
188: }
189: return converter;
190: }
191: }
192:
193: @NotNull
194: public FontConverter getFontConverter() {
195: return fontConverter;
196: }
197: }
|