1 package org.ocltf.translation.library; 2 3 import java.net.URL; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import org.apache.commons.lang.builder.ToStringBuilder; 8 import org.apache.commons.logging.Log; 9 import org.apache.commons.logging.LogFactory; 10 import org.ocltf.common.ComponentContainer; 11 import org.ocltf.common.Plugin; 12 import org.ocltf.common.XmlObjectFactory; 13 import org.ocltf.templateobject.TemplateObject; 14 import org.ocltf.translation.Translator; 15 import org.ocltf.utils.ClassUtils; 16 import org.ocltf.utils.ExceptionUtils; 17 18 /*** 19 * This class contains the translation library information 20 * loaded from a translation-library.xml file. 21 * 22 * @author Chad Brandon 23 */ 24 public class Library implements Plugin { 25 26 private static Log logger = LogFactory.getLog(Library.class); 27 28 private Map libraryTranslations = new HashMap(); 29 30 private String templateEngineClass; 31 32 private String name; 33 34 private URL resource; 35 36 private Map templateObjects = new HashMap(); 37 38 /*** 39 * Returns a new configured instance of this Library 40 * from the libraryXml URL. 41 * 42 * @param libraryXml the URI to the library XML configuration document. 43 * @return Library the configured Library instance. 44 */ 45 public static Library getInstance(URL libraryXml) { 46 String methodName = "getInstance"; 47 ExceptionUtils.checkNull(methodName, "libraryXml", libraryXml); 48 Library library = (Library)XmlObjectFactory.getInstance(Library.class, libraryXml); 49 library.resource = libraryXml; 50 return library; 51 } 52 53 /*** 54 * Returns the name of this Library. 55 * 56 * @return String 57 */ 58 public String getName() { 59 return name; 60 } 61 62 /*** 63 * Sets the name of this Library. 64 * 65 * @param name 66 */ 67 public void setName(String name) { 68 this.name = name; 69 } 70 71 /*** 72 * The resource URI from which this Library was configured. 73 * 74 * @return URL the URI from which this Library was configured. 75 */ 76 public URL getResource() { 77 return this.resource; 78 } 79 80 /*** 81 * Adds a new LibraryTranslation. 82 * 83 * @param libraryTranslation 84 */ 85 public void addLibraryTranslation(LibraryTranslation libraryTranslation) { 86 String methodName = "addLibraryTranslation"; 87 ExceptionUtils.checkNull(methodName, "libraryTranslation", libraryTranslation); 88 libraryTranslation.setLibrary(this); 89 this.libraryTranslations.put(libraryTranslation.getName(), libraryTranslation); 90 } 91 92 /*** 93 * Gets the LibraryTranslation instances (keyed by name) 94 * which are part of this Library. 95 * 96 * @return Map 97 */ 98 public Map getLibraryTranslations() { 99 return this.libraryTranslations; 100 } 101 102 /*** 103 * Retrieves the LibraryTranslation with the specified name. 104 * 105 * @param name 106 * @return LibraryTranslation the LibraryTranslation corresponding 107 * to the <code>name</code>. 108 */ 109 public LibraryTranslation getLibraryTranslation(String name) { 110 String methodName = "getLibraryTranslation"; 111 ExceptionUtils.checkEmpty(methodName, "name", name); 112 return (LibraryTranslation)this.libraryTranslations.get(name); 113 } 114 115 /*** 116 * Sets the TemplateEngine class that will perform 117 * processing of the translation file. 118 * 119 * @param templateEngineClass the Class to use for the TemplateEngine 120 */ 121 public void setTemplateEngine(String templateEngineClass) { 122 this.templateEngineClass = templateEngineClass; 123 } 124 125 /*** 126 * Sets the Translator class that will perform 127 * the translation processing. 128 * 129 * @param translatorClass the Class for the Translator implementation. 130 */ 131 public void setTranslator(String translatorClass) { 132 String methodName = "setTemplateEngine"; 133 try { 134 ComponentContainer.instance().registerDefaultComponent( 135 Translator.class, 136 ClassUtils.loadClass(translatorClass)); 137 } catch (Throwable th) { 138 String errMsg = "Error performing " + methodName; 139 logger.error(errMsg, th); 140 throw new LibraryException(errMsg, th); 141 } 142 } 143 144 /*** 145 * Adds a TransformerConfig object which will make a 146 * Transformer object available to this Library. 147 * 148 * @param transformerConfig the new TemplateObjectConfig object. 149 */ 150 public void addTemplateObject(TemplateObject templateObject) { 151 String methodName = "addTemplateObjects"; 152 ExceptionUtils.checkNull(methodName, "templateObject", templateObject); 153 templateObject.setOwner(this); 154 this.templateObjects.put( 155 templateObject.getName(), 156 templateObject.getInstance()); 157 } 158 159 /*** 160 * Returns all the TemplateObject objects that 161 * are available to this Cartridge. 162 * @return Map the templateObjects keyed by name. 163 */ 164 public Map getTemplateObjects() { 165 return this.templateObjects; 166 } 167 168 /*** 169 * @see org.ocltf.common.Plugin#getResourceName() 170 */ 171 public String getResourceName() { 172 return "META-INF/translation-library.xml"; 173 } 174 175 /*** 176 * @see java.lang.Object#toString() 177 */ 178 public String toString() { 179 return ToStringBuilder.reflectionToString(this); 180 } 181 182 }