1 12 package org.displaytag.export; 13 14 import java.util.HashMap ; 15 import java.util.Map ; 16 17 import org.apache.commons.lang.ArrayUtils; 18 import org.apache.commons.logging.Log; 19 import org.apache.commons.logging.LogFactory; 20 import org.displaytag.Messages; 21 import org.displaytag.exception.WrappedRuntimeException; 22 import org.displaytag.model.TableModel; 23 import org.displaytag.properties.MediaTypeEnum; 24 import org.displaytag.properties.TableProperties; 25 import org.displaytag.util.ReflectHelper; 26 27 28 33 public final class ExportViewFactory 34 { 35 36 39 private static ExportViewFactory instance; 40 41 44 private static Log log = LogFactory.getLog(ExportViewFactory.class); 45 46 49 private final Map viewClasses = new HashMap (); 50 51 54 private ExportViewFactory() 55 { 56 TableProperties properties = TableProperties.getInstance(null); 57 String [] exportTypes = properties.getExportTypes(); 58 59 if (log.isInfoEnabled()) 60 { 61 log.info(Messages.getString("ExportViewFactory.initializing", new Object []{ArrayUtils.toString(exportTypes)})); 63 } 64 for (int j = 0; j < exportTypes.length; j++) 65 { 66 String className = properties.getExportClass(exportTypes[j]); 67 registerExportView(exportTypes[j], className); 68 } 69 } 70 71 75 public static synchronized ExportViewFactory getInstance() 76 { 77 if (instance == null) 78 { 79 instance = new ExportViewFactory(); 80 } 81 return instance; 82 } 83 84 90 public void registerExportView(String name, String viewClassName) 91 { 92 Class exportClass; 93 try 94 { 95 exportClass = ReflectHelper.classForName(viewClassName); 96 } 97 catch (ClassNotFoundException e) 98 { 99 log.error(Messages.getString("ExportViewFactory.classnotfound", new Object []{name, viewClassName})); 101 return; 102 } 103 catch (NoClassDefFoundError e) 104 { 105 log.warn(Messages.getString("ExportViewFactory.noclassdef" , new Object []{name, viewClassName, e.getMessage()})); 107 return; 108 } 109 110 try 111 { 112 exportClass.newInstance(); 113 } 114 catch (InstantiationException e) 115 { 116 log.error(Messages.getString("ExportViewFactory.instantiationexception", new Object []{name, viewClassName, e.getMessage()})); 118 return; 119 } 120 catch (IllegalAccessException e) 121 { 122 log.error(Messages.getString("ExportViewFactory.illegalaccess", new Object []{name, viewClassName, e.getMessage()})); 124 return; 125 } 126 catch (NoClassDefFoundError e) 127 { 128 log.warn(Messages.getString("ExportViewFactory.noclassdef" , new Object []{name, viewClassName, e.getMessage()})); 130 return; 131 } 132 133 MediaTypeEnum media = MediaTypeEnum.registerMediaType(name); 134 viewClasses.put(media, exportClass); 135 136 if (log.isDebugEnabled()) 137 { 138 log.debug(Messages.getString("ExportViewFactory.added", new Object []{media, viewClassName})); 140 } 141 } 142 143 152 public ExportView getView(MediaTypeEnum exportType, TableModel tableModel, boolean exportFullList, 153 boolean includeHeader, boolean decorateValues) 154 { 155 ExportView view; 156 157 Class viewClass = (Class ) viewClasses.get(exportType); 158 159 try 160 { 161 view = (ExportView) viewClass.newInstance(); 162 } 163 catch (InstantiationException e) 164 { 165 throw new WrappedRuntimeException(getClass(), e); 167 } 168 catch (IllegalAccessException e) 169 { 170 throw new WrappedRuntimeException(getClass(), e); 172 } 173 174 view.setParameters(tableModel, exportFullList, includeHeader, decorateValues); 175 return view; 176 } 177 178 } | Popular Tags |