KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > dataview > FormatFactory


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.dataview;
57
58 import java.util.*;
59 import java.text.*;
60
61 public class FormatFactory {
62   private Map builders = new HashMap();
63
64   public FormatFactory() {
65     registerBuilder(DecimalFormat.class, new DecimalFormatBuilder());
66     registerBuilder(NumberFormat.class, new DecimalFormatBuilder());
67     registerBuilder(SimpleDateFormat.class, new SimpleDateFormatBuilder());
68     registerBuilder(DateFormat.class, new SimpleDateFormatBuilder());
69     registerBuilder(ChoiceFormat.class, new ChoiceFormatBuilder());
70     registerBuilder(MessageFormat.class, new MessageFormatBuilder());
71     registerBuilder(MapFormat.class, new MapFormatBuilder());
72   }
73
74   public Format createFormat(
75       Class JavaDoc formatClass,
76       Locale locale,
77       Map parameters) {
78     if (locale == null)
79       locale = Locale.getDefault();
80     Builder builder = getBuilder(formatClass);
81     Format format = builder.create(locale, parameters);
82     return format;
83   }
84
85   public Builder registerBuilder(Class JavaDoc formatClass, Builder builder) {
86     return (Builder)builders.put(formatClass, builder);
87   }
88
89   public Builder unregisterBuilder(Class JavaDoc formatClass) {
90     return (Builder)builders.remove(formatClass);
91   }
92
93   public Builder getBuilder(Class JavaDoc formatClass) {
94     return (Builder)builders.get(formatClass);
95   }
96
97   public static interface Builder {
98     Format create(Locale locale, Map parameters);
99   }
100
101   public static class DecimalFormatBuilder implements Builder {
102     public Format create(Locale locale, Map parameters) {
103       String JavaDoc pattern = (String JavaDoc)parameters.get("pattern");
104       DecimalFormatSymbols sym = new DecimalFormatSymbols(locale);
105       DecimalFormat format = new DecimalFormat();
106       format.setDecimalFormatSymbols(sym);
107       if (pattern != null)
108         format.applyPattern(pattern);
109       return format;
110     }
111   }
112
113   public static class SimpleDateFormatBuilder implements Builder {
114     public Format create(Locale locale, Map parameters) {
115       String JavaDoc pattern = (String JavaDoc)parameters.get("pattern");
116       DateFormatSymbols sym = new DateFormatSymbols(locale);
117       SimpleDateFormat format = new SimpleDateFormat();
118       format.setDateFormatSymbols(sym);
119       if (pattern != null)
120         format.applyPattern(pattern);
121       return format;
122     }
123   }
124
125   public static class ChoiceFormatBuilder implements Builder {
126     public Format create(Locale locale, Map parameters) {
127       String JavaDoc pattern = (String JavaDoc)parameters.get("pattern");
128       ChoiceFormat format = new ChoiceFormat(pattern);
129       return format;
130     }
131   }
132
133   public static class MessageFormatBuilder implements Builder {
134     public Format create(Locale locale, Map parameters) {
135       String JavaDoc pattern = (String JavaDoc)parameters.get("pattern");
136       MessageFormat format = new MessageFormat(pattern, locale);
137       return format;
138     }
139   }
140
141   public static class MapFormatBuilder implements Builder {
142     public Format create(Locale locale, Map parameters) {
143       MapFormat format = new MapFormat();
144       String JavaDoc pattern = (String JavaDoc)parameters.get("pattern");
145       String JavaDoc valueClassName = (String JavaDoc)parameters.get("value-class");
146       String JavaDoc nullValueDesignation = (String JavaDoc)parameters.get("null-value");
147       String JavaDoc entryDelimiter = (String JavaDoc)parameters.get("entry-delimiter");
148       String JavaDoc valueFormatDelimiter = (String JavaDoc)parameters.get("value-delimiter");
149       if (entryDelimiter != null && entryDelimiter.length() > 0)
150         format.setEntryDelimiter(entryDelimiter.charAt(0));
151       if (valueFormatDelimiter != null && valueFormatDelimiter.length() > 0)
152         format.setValueFormatDelimiter(valueFormatDelimiter.charAt(0));
153       if (nullValueDesignation != null)
154         format.setNullValueDesignation(nullValueDesignation);
155       Class JavaDoc valueClass;
156       try {
157         valueClass = Class.forName(valueClassName);
158         format.applyPattern(pattern, valueClass);
159         return format;
160       }
161       catch (ClassNotFoundException JavaDoc ex) {
162         throw new IllegalArgumentException JavaDoc("Value class " + valueClassName + " not found");
163       }
164     }
165   }
166 }
Popular Tags