package railo.runtime.config; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import railo.commons.io.IOUtil; import railo.commons.io.SystemUtil; import railo.commons.io.res.Resource; import railo.commons.lang.SystemOut; import railo.runtime.Info; public abstract class ConfigFactory { static boolean doNew(Resource contextDir) { final boolean readonly = false; try { Resource version = contextDir.getRealResource("version"); String v = Info.getVersionAsString() + "-" + Info.getStateAsString() + "-" + Info.getRealeaseTime(); if (!version.exists()) { if (!readonly) { version.createNewFile(); IOUtil.write(version, v, SystemUtil.getCharset(), false); } return true; } else if (!IOUtil.toString(version, SystemUtil.getCharset()).equals(v)) { if (!readonly) IOUtil.write(version, v, SystemUtil.getCharset(), false); return true; } } catch (Throwable t) { } return false; } /** * load XML Document from XML File * * @param xmlFile * XML File to read * @return returns the Document * @throws SAXException * @throws IOException */ static Document loadDocument(Resource xmlFile) throws SAXException, IOException { InputStream is = null; try { return _loadDocument(is = IOUtil.toBufferedInputStream(xmlFile.getInputStream())); } finally { IOUtil.closeEL(is); } } /** * load XML Document from XML File * * @param is * InoutStream to read * @return returns the Document * @throws SAXException * @throws IOException */ private static Document _loadDocument(InputStream is) throws SAXException, IOException { DOMParser parser = new DOMParser(); InputSource source = new InputSource(is); parser.parse(source); is.close(); return parser.getDocument(); } /** * return first direct child Elements of a Element with given Name * * @param parent * @param nodeName * @return matching children */ public static Element getChildByName(Node parent, String nodeName) { return getChildByName(parent, nodeName, false); } public static Element getChildByName(Node parent, String nodeName, boolean insertBefore) { return getChildByName(parent, nodeName, insertBefore, false); } public static Element getChildByName(Node parent, String nodeName, boolean insertBefore, boolean doNotCreate) { if (parent == null) return null; NodeList list = parent.getChildNodes(); int len = list.getLength(); for (int i = 0; i < len; i++) { Node node = list.item(i); if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equalsIgnoreCase(nodeName)) { return (Element) node; } } if (doNotCreate) return null; Element newEl = parent.getOwnerDocument().createElement(nodeName); if (insertBefore) parent.insertBefore(newEl, parent.getFirstChild()); else parent.appendChild(newEl); return newEl; } /** * return all direct child Elements of a Element with given Name * * @param parent * @param nodeName * @return matching children */ public static Element[] getChildren(Node parent, String nodeName) { if (parent == null) return new Element[0]; NodeList list = parent.getChildNodes(); int len = list.getLength(); ArrayList<Element> rtn = new ArrayList<Element>(); for (int i = 0; i < len; i++) { Node node = list.item(i); if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equalsIgnoreCase(nodeName)) { rtn.add((Element)node); } } return rtn.toArray(new Element[rtn.size()]); } /** * creates a File and his content froma a resurce * * @param resource * @param file * @param password * @throws IOException */ static void createFileFromResource(String resource, Resource file, String password) throws IOException { SystemOut.printDate(SystemUtil.getPrintWriter(SystemUtil.OUT), "write file:" + file); file.createNewFile(); IOUtil.copy(new Info().getClass().getResourceAsStream(resource), file, true); } /** * creates a File and his content froma a resurce * * @param resource * @param file * @throws IOException */ static void createFileFromResource(String resource, Resource file) throws IOException { createFileFromResource(resource, file, null); } public static void createFileFromResourceEL(String resource, Resource file) { try { createFileFromResource(resource, file, null); } catch (Throwable e) { SystemOut.printDate(e.toString(), SystemUtil.ERR); } } static void create(String srcPath, String[] names, Resource dir, boolean doNew) { for(int i=0;i<names.length;i++){ create(srcPath, names[i], dir, doNew); } } static Resource create(String srcPath, String name, Resource dir, boolean doNew) { if(!dir.exists())dir.mkdirs(); Resource f = dir.getRealResource(name); if (!f.exists() || doNew) ConfigWebFactory.createFileFromResourceEL(srcPath+name, f); return f; } static void delete(Resource dbDir, String[] names) { for(int i=0;i<names.length;i++){ delete(dbDir, names[i]); } } static void delete(Resource dbDir, String name) { Resource f = dbDir.getRealResource(name); if (f.exists()) f.delete(); } }