1 16 package org.outerj.daisy.repository; 17 18 import org.outerx.daisy.x10.FieldDocument; 19 20 import java.util.Locale ; 21 import java.util.Date ; 22 import java.util.Calendar ; 23 import java.text.DateFormat ; 24 import java.text.NumberFormat ; 25 26 29 public class FieldHelper { 30 34 public static String getFormattedValue(Object value, ValueType valueType, Locale locale, Repository repository) { 35 if (value instanceof Object []) { 36 Object [] values = (Object [])value; 37 StringBuffer result = new StringBuffer (); 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 getFormattedValueInt(Object value, ValueType valueType, Locale locale, Repository repository) { 50 if (value == null) { 51 return ""; 52 } else if (valueType == ValueType.DATE) { 53 DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale); 54 return dateFormat.format((Date )value); 55 } else if (valueType == ValueType.DATETIME) { 56 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale); 57 return dateFormat.format((Date )value); 58 } else if (valueType == ValueType.DECIMAL || valueType == ValueType.DOUBLE) { 59 NumberFormat decimalFormat = NumberFormat.getNumberInstance(locale); 60 return decimalFormat.format(value); 61 } else if (valueType == ValueType.LINK) { 62 VariantKey link = (VariantKey)value; 63 StringBuffer linkFormatted = new StringBuffer (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 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 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 98 public static Object 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 [] getFieldValuesFromXml(ValueType valueType, FieldDocument.Field fieldXml) { 106 if (valueType == ValueType.STRING) { 107 return fieldXml.getStringArray(); 108 } else if (valueType == ValueType.DATE) { 109 Calendar [] origValues = fieldXml.getDateArray(); 110 Date [] values = new Date [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 [] origValues = fieldXml.getDateTimeArray(); 116 Date [] values = new Date [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 [] values = new Double [origValues.length]; 125 for (int i = 0; i < origValues.length; i++) 126 values[i] = new Double (origValues[i]); 127 return values; 128 } else if (valueType == ValueType.LONG) { 129 long[] origValues = fieldXml.getLongArray(); 130 Long [] values = new Long [origValues.length]; 131 for (int i = 0; i < origValues.length; i++) 132 values[i] = new Long (origValues[i]); 133 return values; 134 } else if (valueType == ValueType.BOOLEAN) { 135 boolean[] origValues = fieldXml.getBooleanArray(); 136 Boolean [] values = new Boolean [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 ("Unexpected ValueType: " + valueType); 152 } 153 } 154 } 155 | Popular Tags |