1 16 package com.blandware.atleap.webapp.util.core; 17 18 import org.apache.commons.collections.list.SetUniqueList; 19 import org.apache.commons.digester.Digester; 20 import org.apache.commons.logging.Log; 21 import org.apache.commons.logging.LogFactory; 22 import org.xml.sax.SAXException ; 23 24 import javax.servlet.ServletContext ; 25 import java.io.IOException ; 26 import java.io.InputStream ; 27 import java.util.ArrayList ; 28 import java.util.HashMap ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Map ; 32 33 42 public class ResourceTypesManager { 43 44 private static final String RESOURCE_TYPES_FILE = "/WEB-INF/resource-types.xml"; 45 public static final String INSTANCE_KEY = "com.blandware.atleap.ResourceTypesManager.INSTANCE"; 46 47 protected transient final Log log = LogFactory.getLog(ResourceTypesManager.class); 48 49 protected Map resourceTypes = new HashMap (); 50 51 56 private ResourceTypesManager(ServletContext servletContext) { 57 InputStream is = servletContext.getResourceAsStream(RESOURCE_TYPES_FILE); 58 if ( is == null ) { 59 if ( log.isErrorEnabled() ) { 60 log.error("Could not locate xml file with resource types: " + RESOURCE_TYPES_FILE); 61 } 62 } 63 try { 64 65 Digester digester = new Digester(); 66 digester.push(this); 67 digester.setNamespaceAware(false); 68 digester.setValidating(false); 69 70 digester.addObjectCreate("resourceTypes/resourceType", ResourceType.class); 71 digester.addSetProperties("resourceTypes/resourceType"); 72 digester.addCallMethod("resourceTypes/resourceType/mimeType", "addMimeType", 1); 73 digester.addCallParam("resourceTypes/resourceType/mimeType", 0, "identifier"); 74 digester.addCallMethod("resourceTypes/resourceType/mimeType/extension", "addExtension", 1); 75 digester.addCallParam("resourceTypes/resourceType/mimeType/extension", 0); 76 digester.addSetNext("resourceTypes/resourceType", "addResourceType", ResourceType.class.getName()); 77 digester.parse(is); 78 79 } catch ( IOException e ) { 80 if ( log.isErrorEnabled() ) { 81 log.error("Could not load xml file with resource types: " + RESOURCE_TYPES_FILE); 82 } 83 } catch ( SAXException e ) { 84 if ( log.isErrorEnabled() ) { 85 log.error("Could not parse xml file with resource types: " + RESOURCE_TYPES_FILE); 86 } 87 } 88 } 89 90 91 97 public static ResourceTypesManager getInstance(ServletContext servletContext) { 98 ResourceTypesManager ourInstance = (ResourceTypesManager) servletContext.getAttribute(INSTANCE_KEY); 99 if ( ourInstance == null ) { 100 ourInstance = new ResourceTypesManager(servletContext); 101 servletContext.setAttribute(INSTANCE_KEY, ourInstance); 102 } 103 return ourInstance; 104 } 105 106 112 public String getResourceTypeByExtension(String extension) { 113 if ( log.isDebugEnabled() ) { 114 log.debug("Get resource type identifier by extension " + extension); 115 } 116 117 for ( Iterator i = resourceTypes.values().iterator(); i.hasNext(); ) { 118 ResourceType resourceType = (ResourceType) i.next(); 119 if ( resourceType.isValidExtension(extension) ) { 120 return resourceType.getIdentifier(); 121 } 122 } 123 124 return null; 125 } 126 127 133 public String getResourceTypeByFileName(String filename) { 134 if ( log.isDebugEnabled() ) { 135 log.debug("Get resource type by file name " + filename); 136 } 137 138 int period = filename.lastIndexOf("."); 141 if ( (period >= 0) ) { 142 String extension = filename.substring(period + 1, filename.length()); 143 return getResourceTypeByExtension(extension); 144 } else { 145 return null; 146 } 147 } 148 149 155 public String getMimeTypeByExtension(String extension) { 156 if ( log.isDebugEnabled() ) { 157 log.debug("Get MIME type identifier by extension " + extension); 158 } 159 160 for ( Iterator i = resourceTypes.values().iterator(); i.hasNext(); ) { 161 ResourceType resourceType = (ResourceType) i.next(); 162 Map mimeTypes = resourceType.getMimeTypes(); 163 for ( Iterator j = mimeTypes.entrySet().iterator(); j.hasNext(); ) { 164 Map.Entry entry = (Map.Entry ) j.next(); 165 List extensions = (List) entry.getValue(); 166 if ( extensions.contains(extension.toLowerCase()) ) { 167 return (String ) entry.getKey(); 168 } 169 } 170 } 171 172 return null; 173 } 174 175 181 public String getMimeTypeByFileName(String filename) { 182 if ( log.isDebugEnabled() ) { 183 log.debug("Get MIME type by file name " + filename); 184 } 185 186 int period = filename.lastIndexOf("."); 188 if ( (period >= 0) ) { 189 String extension = filename.substring(period + 1, filename.length()); 190 return getMimeTypeByExtension(extension); 191 } else { 192 return null; 193 } 194 } 195 196 201 public List getSupportedExtensions() { 202 List extList = new ArrayList (); 203 for ( Iterator i = resourceTypes.values().iterator(); i.hasNext(); ) { 204 ResourceType resourceType = (ResourceType) i.next(); 205 extList.addAll(resourceType.getSupportedExtensions()); 206 } 207 return extList; 208 } 209 210 216 public List getResourceTypeExtensions(String resourceTypeIdentifier) { 217 ResourceType resourceType = (ResourceType) resourceTypes.get(resourceTypeIdentifier); 218 if ( resourceType != null ) { 219 return resourceType.getSupportedExtensions(); 220 } else { 221 return null; 222 } 223 } 224 225 231 public String getDefaultMimeType(String resourceTypeIdentifier) { 232 ResourceType resourceType = (ResourceType) resourceTypes.get(resourceTypeIdentifier); 233 if ( resourceType != null ) { 234 return resourceType.getDefaultMimeType(); 235 } else { 236 return null; 237 } 238 } 239 240 246 public String getDefaultExtension(String mimeTypeIdentifier) { 247 String defaultExtension = null; 248 for ( Iterator i = resourceTypes.values().iterator(); i.hasNext() && defaultExtension == null; ) { 249 ResourceType resourceType = (ResourceType) i.next(); 250 defaultExtension = resourceType.getDefaultExtension(mimeTypeIdentifier); 251 } 252 return defaultExtension; 253 } 254 255 261 public String getResourceTypeNameKey(String resourceTypeIdentifier) { 262 ResourceType resourceType = (ResourceType) resourceTypes.get(resourceTypeIdentifier); 263 if ( resourceType != null ) { 264 return resourceType.getNameKey(); 265 } else { 266 return null; 267 } 268 } 269 270 275 public void addResourceType(ResourceType resourceType) { 276 resourceTypes.put(resourceType.getIdentifier(), resourceType); 277 } 278 279 282 public static class ResourceType { 283 284 287 protected String identifier; 288 289 292 protected String nameKey; 293 294 297 protected Map mimeTypes = new HashMap (); 298 299 302 protected String defautMimeType = null; 303 304 307 protected List extensions = SetUniqueList.decorate(new ArrayList ()); 308 309 312 public ResourceType() { 313 } 314 315 320 public ResourceType(String identifier) { 321 this.identifier = identifier; 322 } 323 324 330 public ResourceType(String identifier, String nameKey) { 331 this.identifier = identifier; 332 this.nameKey = nameKey; 333 } 334 335 340 public String getIdentifier() { 341 return identifier; 342 } 343 344 349 public void setIdentifier(String identifier) { 350 this.identifier = identifier; 351 } 352 353 358 public String getNameKey() { 359 return nameKey; 360 } 361 362 367 public void setNameKey(String nameKey) { 368 this.nameKey = nameKey; 369 } 370 371 376 public Map getMimeTypes() { 377 return mimeTypes; 378 } 379 380 385 public void setMimeTypes(Map mimeTypes) { 386 this.mimeTypes = mimeTypes; 387 } 388 389 394 public List getSupportedExtensions() { 395 SetUniqueList extSet = SetUniqueList.decorate(new ArrayList ()); 396 for ( Iterator i = mimeTypes.values().iterator(); i.hasNext(); ) { 397 SetUniqueList extensions = (SetUniqueList) i.next(); 398 extSet.addAll(extensions); 399 } 400 return extSet; 401 } 402 403 409 public boolean isValidExtension(String extension) { 410 return getSupportedExtensions().contains(extension.toLowerCase()); 411 } 412 413 418 public String getDefaultMimeType() { 419 return defautMimeType; 420 } 421 422 427 public void addMimeType(String identifier) { 428 if ( defautMimeType == null ) { 429 defautMimeType = identifier; 430 } 431 if ( !mimeTypes.containsKey(identifier) ) { 432 mimeTypes.put(identifier, extensions); 433 extensions = SetUniqueList.decorate(new ArrayList ()); 434 } 435 } 436 437 442 public void addExtension(String extension) { 443 if ( extension != null ) { 444 extensions.add(extension.toLowerCase()); 445 } 446 } 447 448 454 public String getDefaultExtension(String mimeTypeIdentifier) { 455 SetUniqueList extensions = (SetUniqueList) mimeTypes.get(mimeTypeIdentifier); 456 if ( extensions != null && !extensions.isEmpty() ) { 457 return (String ) extensions.get(0); 458 } else { 459 return null; 460 } 461 } 462 463 } 464 465 466 } 467 | Popular Tags |