1 31 32 package org.opencms.frontend.templateone.form; 33 34 import org.opencms.main.CmsLog; 35 import org.opencms.main.OpenCms; 36 37 import java.io.File ; 38 import java.io.FileInputStream ; 39 import java.io.IOException ; 40 import java.util.HashMap ; 41 import java.util.Iterator ; 42 import java.util.Map ; 43 44 import org.apache.commons.collections.ExtendedProperties; 45 import org.apache.commons.logging.Log; 46 47 53 public final class CmsFieldFactory { 54 55 56 public static final String CUSTOM_FORM_FIELD_PROPERTIES = OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf( 57 "classes" + File.separatorChar + "custom_form_field.properties"); 58 59 60 private static final Log LOG = CmsLog.getLog(CmsFieldFactory.class); 61 62 63 private static CmsFieldFactory sharedInstance = null; 64 65 66 private Map m_registeredFieldTypes; 67 68 71 private CmsFieldFactory() { 72 73 super(); 74 75 m_registeredFieldTypes = new HashMap (); 76 77 registerFieldType(CmsCheckboxField.getStaticType(), CmsCheckboxField.class.getName()); 79 registerFieldType(CmsEmailField.getStaticType(), CmsEmailField.class.getName()); 80 registerFieldType(CmsHiddenField.getStaticType(), CmsHiddenField.class.getName()); 81 registerFieldType(CmsRadioButtonField.getStaticType(), CmsRadioButtonField.class.getName()); 82 registerFieldType(CmsSelectionField.getStaticType(), CmsSelectionField.class.getName()); 83 registerFieldType(CmsTextField.getStaticType(), CmsTextField.class.getName()); 84 registerFieldType(CmsTextareaField.getStaticType(), CmsTextareaField.class.getName()); 85 86 File propertyFile = null; 87 try { 88 89 94 propertyFile = new File (CUSTOM_FORM_FIELD_PROPERTIES); 95 if (propertyFile.exists()) { 96 97 ExtendedProperties fieldProperties = new ExtendedProperties(); 98 fieldProperties.load(new FileInputStream (propertyFile)); 99 100 Iterator i = fieldProperties.keySet().iterator(); 101 while (i.hasNext()) { 102 103 String key = (String )i.next(); 104 if (!"FIELDS".equalsIgnoreCase(key)) { 105 continue; 106 } 107 108 String [] values = fieldProperties.getStringArray(key); 109 if (values == null || values.length == 0) { 110 continue; 111 } 112 113 for (int j = 0, n = values.length; j < n; j++) { 114 115 String field = values[j]; 116 int index = field.indexOf(":"); 117 if (index == -1) { 118 continue; 119 } 120 121 String fieldType = field.substring(0, index); 122 String fieldClass = field.substring(index + 1, field.length()); 123 registerFieldType(fieldType, fieldClass); 124 } 125 } 126 } 127 } catch (IOException e) { 128 129 if (LOG.isErrorEnabled()) { 130 LOG.error(Messages.get().getBundle().key( 131 Messages.LOG_ERR_READING_CUSTOM_FORM_FIELD_PROPERTIES_1, 132 propertyFile.getAbsolutePath()), e); 133 } 134 } 135 } 136 137 140 protected void finalize() throws Throwable { 141 142 try { 143 144 if (m_registeredFieldTypes != null) { 145 m_registeredFieldTypes.clear(); 146 } 147 148 m_registeredFieldTypes = null; 149 } catch (Throwable t) { 150 } 152 153 super.finalize(); 154 } 155 156 161 public static synchronized CmsFieldFactory getSharedInstance() { 162 163 if (sharedInstance == null) { 164 sharedInstance = new CmsFieldFactory(); 165 } 166 167 return sharedInstance; 168 } 169 170 177 private Object registerFieldType(String type, String className) { 178 179 return m_registeredFieldTypes.put(type, className); 180 } 181 182 188 protected A_CmsField getField(String type) { 189 190 A_CmsField field = null; 191 192 try { 193 194 String className = (String )m_registeredFieldTypes.get(type); 195 field = (A_CmsField)Class.forName(className).newInstance(); 196 } catch (Throwable t) { 197 198 if (LOG.isErrorEnabled()) { 199 LOG.error(Messages.get().getBundle().key(Messages.LOG_ERR_FIELD_INSTANTIATION_1, type), t); 200 } 201 } 202 203 return field; 204 } 205 } 206 | Popular Tags |