public Object getPrototype() { if (prototypes == null) { prototypes = new HashMap<String, Object>(); } if (!prototypes.containsKey(current.getName())) { prototypes.put(current.getName(), factory.create(current.getName())); } return prototypes.get(current.getName()); }
/** * Adds the contents of the given stream to the data base. The stream have to contain key value * pairs as declared by the DTD langpack.dtd. * * @param in an InputStream to read the translation from. * @throws Exception */ public void add(InputStream in) throws Exception { // Initialises the parser StdXMLParser parser = new StdXMLParser(); parser.setBuilder(XMLBuilderFactory.createXMLBuilder()); parser.setReader(new StdXMLReader(in)); parser.setValidator(new NonValidator()); // We get the data XMLElement data = (XMLElement) parser.parse(); // We check the data if (!"langpack".equalsIgnoreCase(data.getName())) throw new Exception("this is not an IzPack XML langpack file"); // We fill the Hashtable Vector children = data.getChildren(); int size = children.size(); for (int i = 0; i < size; i++) { XMLElement e = (XMLElement) children.get(i); String text = e.getContent(); if (text != null && !"".equals(text)) { put(e.getAttribute("id"), text.trim()); } else { put(e.getAttribute("id"), e.getAttribute("txt")); } } }
/** * Returns the attribute for the given attribute name. If no attribute exist, an * InstallerException with a detail message is thrown. * * @param element XML element which should contain the attribute * @param attrName key of the attribute * @return the attribute as string * @throws Exception */ public String getRequiredAttribute(XMLElement element, String attrName) throws InstallerException { String attr = element.getAttribute(attrName); if (attr == null) { parseError(element, "<" + element.getName() + "> requires attribute '" + attrName + "'."); } return (attr); }
private CompilationJob collectJobsRecursive(XMLElement node, ArrayList classpath) throws Exception { Enumeration toplevel_tags = node.enumerateChildren(); ArrayList ourclasspath = (ArrayList) classpath.clone(); ArrayList files = new ArrayList(); while (toplevel_tags.hasMoreElements()) { XMLElement child = (XMLElement) toplevel_tags.nextElement(); if (child.getName().equals("classpath")) { changeClassPath(ourclasspath, child); } else if (child.getName().equals("job")) { CompilationJob subjob = collectJobsRecursive(child, ourclasspath); if (subjob != null) this.jobs.add(subjob); } else if (child.getName().equals("directory")) { String name = child.getAttribute("name"); if (name != null) { // substitute variables String finalname = this.vs.substitute(name, "plain"); files.addAll(scanDirectory(new File(finalname))); } } else if (child.getName().equals("file")) { String name = child.getAttribute("name"); if (name != null) { // substitute variables String finalname = this.vs.substitute(name, "plain"); files.add(new File(finalname)); } } else if (child.getName().equals("packdepency")) { String name = child.getAttribute("name"); if (name == null) { System.out.println("invalid compilation spec: <packdepency> without name attribute"); return null; } // check whether the wanted pack was selected for installation Iterator pack_it = this.idata.selectedPacks.iterator(); boolean found = false; while (pack_it.hasNext()) { com.izforge.izpack.Pack pack = (com.izforge.izpack.Pack) pack_it.next(); if (pack.name.equals(name)) { found = true; break; } } if (!found) { Debug.trace("skipping job because pack " + name + " was not selected."); return null; } } } if (files.size() > 0) return new CompilationJob( this.handler, this.idata.langpack, (String) node.getAttribute("name"), files, ourclasspath); return null; }