KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > FieldHelper


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.outerj.daisy.repository;
17
18 import org.outerx.daisy.x10.FieldDocument;
19
20 import java.util.Locale JavaDoc;
21 import java.util.Date JavaDoc;
22 import java.util.Calendar JavaDoc;
23 import java.text.DateFormat JavaDoc;
24 import java.text.NumberFormat JavaDoc;
25
26 /**
27  * Some helper methods that can be useful when working with {@link Field}s.
28  */

29 public class FieldHelper {
30     /**
31      * Convenience method to get a String representation of a value, taking into
32      * account the locale (thus nicer then calling toString() on the value).
33      */

34     public static String JavaDoc getFormattedValue(Object JavaDoc value, ValueType valueType, Locale JavaDoc locale, Repository repository) {
35         if (value instanceof Object JavaDoc[]) {
36             Object JavaDoc[] values = (Object JavaDoc[])value;
37             StringBuffer JavaDoc result = new StringBuffer JavaDoc();
38             for (int i = 0; i < values.length; i++) {
39                 if (i > 0)
40                     result.append(", ");
41                 result.append(getFormattedValueInt(values[i], valueType, locale, repository));
42             }
43             return result.toString();
44         } else {
45             return getFormattedValueInt(value, valueType, locale, repository);
46         }
47     }
48
49     private static String JavaDoc getFormattedValueInt(Object JavaDoc value, ValueType valueType, Locale JavaDoc locale, Repository repository) {
50         if (value == null) {
51             return "";
52         } else if (valueType == ValueType.DATE) {
53             DateFormat JavaDoc dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
54             return dateFormat.format((Date JavaDoc)value);
55         } else if (valueType == ValueType.DATETIME) {
56             DateFormat JavaDoc dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
57             return dateFormat.format((Date JavaDoc)value);
58         } else if (valueType == ValueType.DECIMAL || valueType == ValueType.DOUBLE) {
59             NumberFormat JavaDoc decimalFormat = NumberFormat.getNumberInstance(locale);
60             return decimalFormat.format(value);
61         } else if (valueType == ValueType.LINK) {
62             VariantKey link = (VariantKey)value;
63             StringBuffer JavaDoc linkFormatted = new StringBuffer JavaDoc(20);
64             linkFormatted.append("daisy:");
65             linkFormatted.append(link.getDocumentId());
66             if (link.getBranchId() != -1 || link.getLanguageId() != -1) {
67                 linkFormatted.append("@");
68                 if (link.getBranchId() != -1) {
69                     String JavaDoc branchName;
70                     try {
71                         branchName = repository.getVariantManager().getBranch(link.getBranchId(), false).getName();
72                     } catch (RepositoryException e) {
73                         branchName = String.valueOf(link.getBranchId());
74                     }
75                     linkFormatted.append(branchName);
76                 }
77                 if (link.getLanguageId() != -1) {
78                     String JavaDoc languageName;
79                     try {
80                         languageName = repository.getVariantManager().getLanguage(link.getLanguageId(), false).getName();
81                     } catch (RepositoryException e) {
82                         languageName = String.valueOf(link.getLanguageId());
83                     }
84                     linkFormatted.append(":");
85                     linkFormatted.append(languageName);
86                 }
87             }
88             return linkFormatted.toString();
89         } else {
90             return value.toString();
91         }
92     }
93
94     /**
95      * Convenience method to get a value of a certain ValueType from a Field-as-XML.
96      * Useful if you're working with the XML representation of a field.
97      */

98     public static Object JavaDoc getFieldValueFromXml(ValueType valueType, boolean multiValue, FieldDocument.Field fieldXml) {
99         if (multiValue)
100             return getFieldValuesFromXml(valueType, fieldXml);
101         else
102             return getFieldValuesFromXml(valueType, fieldXml)[0];
103     }
104
105     public static Object JavaDoc[] getFieldValuesFromXml(ValueType valueType, FieldDocument.Field fieldXml) {
106         if (valueType == ValueType.STRING) {
107             return fieldXml.getStringArray();
108         } else if (valueType == ValueType.DATE) {
109             Calendar JavaDoc[] origValues = fieldXml.getDateArray();
110             Date JavaDoc[] values = new Date JavaDoc[origValues.length];
111             for (int i = 0; i < origValues.length; i++)
112                 values[i] = origValues[i].getTime();
113             return values;
114         } else if (valueType == ValueType.DATETIME) {
115             Calendar JavaDoc[] origValues = fieldXml.getDateTimeArray();
116             Date JavaDoc[] values = new Date JavaDoc[origValues.length];
117             for (int i = 0; i < origValues.length; i++)
118                 values[i] = origValues[i].getTime();
119             return values;
120         } else if (valueType == ValueType.DECIMAL) {
121             return fieldXml.getDecimalArray();
122         } else if (valueType == ValueType.DOUBLE) {
123             double[] origValues = fieldXml.getDoubleArray();
124             Double JavaDoc[] values = new Double JavaDoc[origValues.length];
125             for (int i = 0; i < origValues.length; i++)
126                 values[i] = new Double JavaDoc(origValues[i]);
127             return values;
128         } else if (valueType == ValueType.LONG) {
129             long[] origValues = fieldXml.getLongArray();
130             Long JavaDoc[] values = new Long JavaDoc[origValues.length];
131             for (int i = 0; i < origValues.length; i++)
132                 values[i] = new Long JavaDoc(origValues[i]);
133             return values;
134         } else if (valueType == ValueType.BOOLEAN) {
135             boolean[] origValues = fieldXml.getBooleanArray();
136             Boolean JavaDoc[] values = new Boolean JavaDoc[origValues.length];
137             for (int i = 0; i < origValues.length; i++)
138                 values[i] = origValues[i] ? Boolean.TRUE : Boolean.FALSE;
139             return values;
140         } else if (valueType == ValueType.LINK) {
141             FieldDocument.Field.Link[] origValues = fieldXml.getLinkArray();
142             VariantKey[] values = new VariantKey[origValues.length];
143             for (int i = 0; i < origValues.length; i++) {
144                 long documentId = origValues[i].getDocumentId();
145                 long branchId = origValues[i].isSetBranchId() ? origValues[i].getBranchId() : -1;
146                 long languageId = origValues[i].isSetLanguageId() ? origValues[i].getLanguageId() : -1;
147                 values[i] = new VariantKey(documentId, branchId, languageId);
148             }
149             return values;
150         } else {
151             throw new RuntimeException JavaDoc("Unexpected ValueType: " + valueType);
152         }
153     }
154 }
155
Popular Tags