1 10 package org.mmbase.util.xml; 11 12 import java.io.File ; 13 import java.io.IOException ; 14 import java.util.*; 15 import org.w3c.dom.*; 16 import javax.xml.transform.TransformerException ; 17 18 import org.mmbase.module.core.*; 19 import org.mmbase.model.*; 20 import org.mmbase.storage.search.SearchQueryException; 21 import org.mmbase.util.logging.Logger; 22 import org.mmbase.util.logging.Logging; 23 import org.mmbase.util.xml.applicationdata.FullBackupDataWriter; 24 import org.mmbase.util.xml.applicationdata.ContextDepthDataWriter; 25 import org.mmbase.util.*; 26 27 33 public class ApplicationWriter extends DocumentWriter { 34 35 private static final Logger log = Logging.getLoggerInstance(ApplicationWriter.class); 36 37 protected ApplicationReader reader; 38 protected MMBase mmbase; 39 40 46 public ApplicationWriter(ApplicationReader reader, MMBase mmbase) throws DOMException { 47 super("application", ApplicationReader.PUBLIC_ID_APPLICATION, 48 XMLEntityResolver.DOMAIN + XMLEntityResolver.DTD_SUBPATH + ApplicationReader.DTD_APPLICATION); 49 this.reader = reader; 50 this.mmbase = mmbase; 51 getMessageRetriever("org.mmbase.util.xml.resources.applicationwriter"); 52 } 53 54 58 protected void generate() throws DOMException { 59 Element root = document.getDocumentElement(); 60 addComment("application.configuration", reader.getName(), reader.getDescription(), root); 61 root.setAttribute("name", reader.getName()); 62 root.setAttribute("maintainer", reader.getMaintainer()); 63 root.setAttribute("version", "" + reader.getVersion()); 64 root.setAttribute("autodeploy", "" + reader.hasAutoDeploy()); 65 66 addRequirements(root); 67 addNeededBuilderList(root); 68 addNeededRelDefList(root); 69 addAllowedRelationList(root); 70 addDataSourceList(root); 71 addRelationSourceList(root); 72 addContextSourceList(root); 73 74 addComment("application.installnotice",root); 75 addContentElement("installnotice",reader.getInstallNotice(),root); 76 addComment("application.description",root); 77 addContentElement("description",reader.getDescription(),root); 78 } 79 80 protected void addRequirements(Element root) { 81 addComment("application.requirements",root); 82 Element elementSet = document.createElement("requirements"); 83 root.appendChild(elementSet); 84 List requirements = reader.getRequirements(); 85 for (Iterator i = requirements.iterator(); i.hasNext();) { 86 Element requirement = document.createElement("requirement"); 87 elementSet.appendChild(requirement); 88 Map bset = (Map)i.next(); 89 requirement.setAttribute("name", (String )bset.get("name")); 90 requirement.setAttribute("maintainer", (String )bset.get("maintainer")); 91 requirement.setAttribute("version", (String )bset.get("version")); 92 String type = (String )bset.get("type"); 93 if (type == null) type = "application"; 94 requirement.setAttribute("type", type); 95 } 96 } 97 98 protected void addNeededBuilderList(Element root) { 99 addComment("application.neededbuilderlist",root); 100 Element elementSet = document.createElement("neededbuilderlist"); 101 root.appendChild(elementSet); 102 List builders = reader.getNeededBuilders(); 103 for (Iterator i = builders.iterator(); i.hasNext();) { 104 Element builder = document.createElement("builder"); 105 elementSet.appendChild(builder); 106 Map bset = (Map)i.next(); 107 builder.setAttribute("name", (String )bset.get("name")); 108 builder.setAttribute("maintainer", (String )bset.get("maintainer")); 109 builder.setAttribute("version", (String )bset.get("version")); 110 } 111 } 112 113 protected void addNeededRelDefList(Element root) { 114 addComment("application.neededreldeflist",root); 115 Element elementSet = document.createElement("neededreldeflist"); 116 root.appendChild(elementSet); 117 List reldefs = reader.getNeededRelDefs(); 118 for (Iterator i = reldefs.iterator(); i.hasNext();) { 119 Element reldef = document.createElement("reldef"); 120 elementSet.appendChild(reldef); 121 Map bset = (Map)i.next(); 122 reldef.setAttribute("source", (String )bset.get("source")); 123 reldef.setAttribute("target", (String )bset.get("target")); 124 reldef.setAttribute("direction", (String )bset.get("direction")); 125 reldef.setAttribute("guisourcename", (String )bset.get("guisourcename")); 126 reldef.setAttribute("guitargetname", (String )bset.get("guitargetname")); 127 String builder = (String )bset.get("builder"); 128 if (builder != null) { 129 reldef.setAttribute("builder", builder); 130 } 131 } 132 } 133 134 protected void addAllowedRelationList(Element root) { 135 addComment("application.allowedrelationlist",root); 136 Element elementSet = document.createElement("allowedrelationlist"); 137 root.appendChild(elementSet); 138 List relations = reader.getAllowedRelations(); 139 for (Iterator i = relations.iterator(); i.hasNext();) { 140 Element relation = document.createElement("relation"); 141 elementSet.appendChild(relation); 142 Map bset = (Map)i.next(); 143 relation.setAttribute("from", (String )bset.get("from")); 144 relation.setAttribute("to", (String )bset.get("to")); 145 relation.setAttribute("type", (String )bset.get("type")); 146 } 147 } 148 149 protected void addDataSourceList(Element root) { 150 addComment("application.datasourcelist",root); 151 Element elementSet = document.createElement("datasourcelist"); 152 root.appendChild(elementSet); 153 List sources = reader.getDataSources(); 154 for (Iterator i = sources.iterator(); i.hasNext();) { 155 Element source = document.createElement("datasource"); 156 elementSet.appendChild(source); 157 Map bset = (Map)i.next(); 158 source.setAttribute("path", (String )bset.get("path")); 159 source.setAttribute("builder", (String )bset.get("builder")); 160 } 161 } 162 163 protected void addRelationSourceList(Element root) { 164 addComment("application.relationsourcelist",root); 165 Element elementSet = document.createElement("relationsourcelist"); 166 root.appendChild(elementSet); 167 List sources = reader.getRelationSources(); 168 for (Iterator i = sources.iterator(); i.hasNext();) { 169 Element source = document.createElement("relationsource"); 170 elementSet.appendChild(source); 171 Map bset = (Map)i.next(); 172 source.setAttribute("path", (String )bset.get("path")); 173 source.setAttribute("builder", (String )bset.get("builder")); 174 } 175 } 176 177 protected void addContextSourceList(Element root) { 178 addComment("application.contextsourcelist",root); 179 Element elementSet = document.createElement("contextsourcelist"); 180 root.appendChild(elementSet); 181 List sources = reader.getContextSources(); 182 for (Iterator i = sources.iterator(); i.hasNext();) { 183 Element source = document.createElement("contextsource"); 184 elementSet.appendChild(source); 185 Map bset = (Map)i.next(); 186 source.setAttribute("path", (String )bset.get("path")); 187 source.setAttribute("type", (String )bset.get("type")); 188 source.setAttribute("goal", (String )bset.get("goal")); 189 } 190 } 191 192 200 public void writeToPath(String targetPath, Logger logger) throws IOException , TransformerException , SearchQueryException { 201 CloudModel cm = ModelsManager.getModel(reader.getName()); 203 log.info("CMW="+cm); 204 if (cm!=null) cm.writeToFile(targetPath + "/" + reader.getName() + ".xml"); 205 206 writeDateSources(targetPath, logger); 208 writeContextSources(targetPath); 210 writeBuilders(targetPath, logger); 213 logger.info("Writing Application file : " + targetPath + "/" + reader.getName() + ".xml"); 214 } 215 216 private void writeDateSources(String targetPath, Logger logger) throws IOException , SearchQueryException { 217 List sources = reader.getContextSources(); 218 for (Iterator i = sources.iterator(); i.hasNext();) { 219 Map bset = (Map)i.next(); 220 String path = (String )bset.get("path"); 221 String type = (String )bset.get("type"); 222 String goal = (String )bset.get("goal"); 223 224 logger.info("save type : " + type); 225 logger.info("save goal : " + goal); 226 227 if (type.equals("depth")) { 228 XMLContextDepthReader contextReader = new XMLContextDepthReader(MMBaseContext.getConfigPath() + "/applications/" + path); 229 ContextDepthDataWriter.writeContext(reader, contextReader, targetPath, mmbase, logger); 230 } else if (type.equals("full")) { 231 FullBackupDataWriter.writeContext(reader, targetPath, mmbase, logger); 232 } 233 } 234 } 235 236 private void writeContextSources(String targetPath) { 237 List sources = reader.getContextSources(); 238 for (Iterator i = sources.iterator(); i.hasNext();) { 239 Map bset = (Map)i.next(); 240 String path = (String )bset.get("path"); 241 String type = (String )bset.get("type"); 242 if (type.equals("depth")) { 243 XMLContextDepthReader contextReader = new XMLContextDepthReader( MMBaseContext.getConfigPath() + "/applications/" + path); 244 ContextDepthDataWriter.writeContextXML(contextReader, targetPath + "/" + path); 245 } 246 } 247 } 248 249 private void writeBuilders(String targetPath, Logger logger) throws IOException , TransformerException { 250 File file = new File (targetPath + "/" + reader.getName() + "/builders"); 252 file.mkdirs(); 253 CloudModel cm = ModelsManager.getModel("default"); 255 log.info("CM="+cm); 256 List builders = reader.getNeededBuilders(); 257 for (Iterator i = builders.iterator(); i.hasNext();) { 258 Map bset = (Map)i.next(); 259 String name = (String )bset.get("name"); 260 MMObjectBuilder builder = mmbase.getBuilder(name); 261 if (builder != null) { 262 logger.info("save builder : " + name); 263 CloudModelBuilder cmb = cm.getModelBuilder(name); 264 cmb.writeToFile(targetPath + "/" + reader.getName() + "/builders/" + name + ".xml"); 265 266 272 } 273 } 274 } 275 276 } 277 | Popular Tags |