KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > xml > ApplicationWriter


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.xml;
11
12 import java.io.File JavaDoc;
13 import java.io.IOException JavaDoc;
14 import java.util.*;
15 import org.w3c.dom.*;
16 import javax.xml.transform.TransformerException JavaDoc;
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 /**
28  * @javadoc
29  * @deprecation-used Can use Xerces functionality to write an XML, isn't it? Should at least use StringBuffer.
30  * @author DAniel Ockeloen
31  * @version $Id: ApplicationWriter.java,v 1.4 2006/03/28 17:49:36 daniel Exp $
32  */

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     /**
41      * Constructs the document writer.
42      * The constructor calls its super to create a basic document, based on the application document type.
43      * @param reader the reader for the original application
44      * @param mmbase the mmbase instance to get the application data from
45      */

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     /**
55      * Generates the document. Can only be called once.
56      * @throws DOMException when an error occurred during generation
57      */

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 JavaDoc)bset.get("name"));
90             requirement.setAttribute("maintainer", (String JavaDoc)bset.get("maintainer"));
91             requirement.setAttribute("version", (String JavaDoc)bset.get("version"));
92             String JavaDoc type = (String JavaDoc)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 JavaDoc)bset.get("name"));
108             builder.setAttribute("maintainer", (String JavaDoc)bset.get("maintainer"));
109             builder.setAttribute("version", (String JavaDoc)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 JavaDoc)bset.get("source"));
123             reldef.setAttribute("target", (String JavaDoc)bset.get("target"));
124             reldef.setAttribute("direction", (String JavaDoc)bset.get("direction"));
125             reldef.setAttribute("guisourcename", (String JavaDoc)bset.get("guisourcename"));
126             reldef.setAttribute("guitargetname", (String JavaDoc)bset.get("guitargetname"));
127             String JavaDoc builder = (String JavaDoc)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 JavaDoc)bset.get("from"));
144             relation.setAttribute("to", (String JavaDoc)bset.get("to"));
145             relation.setAttribute("type", (String JavaDoc)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 JavaDoc)bset.get("path"));
159             source.setAttribute("builder", (String JavaDoc)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 JavaDoc)bset.get("path"));
173             source.setAttribute("builder", (String JavaDoc)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 JavaDoc)bset.get("path"));
187             source.setAttribute("type", (String JavaDoc)bset.get("type"));
188             source.setAttribute("goal", (String JavaDoc)bset.get("goal"));
189         }
190     }
191
192     /**
193      * Generates the documents for this application and store it as a set of files in the given path.
194      * @param targetPath the filepath (directory) where the configuration is to be stored
195      * @param logger This thing must receive the errors
196      * @throws TransformerException if one or more documents are malformed
197      * @throws IOException if one or more files cannot be written
198      * @throws SearchQueryException if data could not be obtained from the database
199      */

200     public void writeToPath(String JavaDoc targetPath, Logger logger) throws IOException JavaDoc, TransformerException JavaDoc, SearchQueryException {
201         //writeToFile(targetPath + "/" + reader.getName() + ".xml");
202
CloudModel cm = ModelsManager.getModel(reader.getName());
203     log.info("CMW="+cm);
204         if (cm!=null) cm.writeToFile(targetPath + "/" + reader.getName() + ".xml");
205
206         // now the tricky part starts figure out what nodes to write
207
writeDateSources(targetPath, logger);
208         // now write the context files itself
209
writeContextSources(targetPath);
210         // now as a backup write all the needed builders
211
// that the application maker claimed we needed
212
writeBuilders(targetPath, logger);
213         logger.info("Writing Application file : " + targetPath + "/" + reader.getName() + ".xml");
214     }
215
216     private void writeDateSources(String JavaDoc targetPath, Logger logger) throws IOException JavaDoc, SearchQueryException {
217         List sources = reader.getContextSources();
218         for (Iterator i = sources.iterator(); i.hasNext();) {
219             Map bset = (Map)i.next();
220             String JavaDoc path = (String JavaDoc)bset.get("path");
221             String JavaDoc type = (String JavaDoc)bset.get("type");
222             String JavaDoc goal = (String JavaDoc)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 JavaDoc targetPath) {
237         List sources = reader.getContextSources();
238         for (Iterator i = sources.iterator(); i.hasNext();) {
239             Map bset = (Map)i.next();
240             String JavaDoc path = (String JavaDoc)bset.get("path");
241             String JavaDoc type = (String JavaDoc)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 JavaDoc targetPath, Logger logger) throws IOException JavaDoc, TransformerException JavaDoc {
250         // create the dir for the Data & resource files
251
File JavaDoc file = new File JavaDoc(targetPath + "/" + reader.getName() + "/builders");
252         file.mkdirs();
253     // get the default model.
254
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 JavaDoc name = (String JavaDoc)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         /*
267                 BuilderWriter builderOut = new BuilderWriter(builder);
268                 builderOut.setIncludeComments(includeComments());
269                 builderOut.setExpandBuilder(false);
270                 builderOut.writeToFile(targetPath + "/" + reader.getName() + "/builders/" + name + ".xml");
271         */

272             }
273         }
274     }
275
276 }
277
Popular Tags