KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > packaging > projects > creators > DataApps1Creator


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

7 package org.mmbase.applications.packaging.projects.creators;
8
9 import java.io.File JavaDoc;
10 import java.io.FileOutputStream JavaDoc;
11 import java.util.Date JavaDoc;
12 import java.util.HashSet JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.jar.JarOutputStream JavaDoc;
15 import java.util.jar.Manifest JavaDoc;
16
17 import org.mmbase.applications.packaging.ProjectManager;
18 import org.mmbase.applications.packaging.ProviderManager;
19 import org.mmbase.applications.packaging.packagehandlers.DataApps1Package;
20 import org.mmbase.applications.packaging.projects.Project;
21 import org.mmbase.applications.packaging.projects.Target;
22 import org.mmbase.applications.packaging.projects.packageStep;
23 import org.mmbase.applications.packaging.projects.creators.dataapptools.Apps1DataWriter;
24 import org.mmbase.applications.packaging.projects.editors.cloudmodel.Model;
25 import org.mmbase.applications.packaging.projects.editors.cloudmodel.NeededBuilder;
26 import org.mmbase.applications.packaging.util.ExtendedDocumentReader;
27 import org.mmbase.module.core.MMBase;
28 import org.mmbase.module.core.MMObjectNode;
29 import org.mmbase.module.core.VirtualBuilder;
30 import org.mmbase.util.XMLEntityResolver;
31 import org.mmbase.util.logging.Logger;
32 import org.mmbase.util.logging.Logging;
33 import org.w3c.dom.NamedNodeMap JavaDoc;
34
35 /**
36  * DisplayHtmlPackage, Handler for html packages
37  *
38  * @author Daniel Ockeloen (MMBased)
39  */

40 public class DataApps1Creator extends BasicCreator implements CreatorInterface {
41
42     private static Logger log = Logging.getLoggerInstance(DataApps1Creator.class);
43
44     /**
45      * Description of the Field
46      */

47     public final static String JavaDoc DTD_PACKAGING_DATA_APPS1_1_0 = "packaging_data_apps1_1_0.dtd";
48
49     /**
50      * Description of the Field
51      */

52     public final static String JavaDoc PUBLIC_ID_PACKAGING_DATA_APPS1_1_0 = "-//MMBase//DTD packaging_data_apps1 config 1.0//EN";
53
54
55     /**
56      * Description of the Method
57      */

58     public static void registerPublicIDs() {
59         XMLEntityResolver.registerPublicID(PUBLIC_ID_PACKAGING_DATA_APPS1_1_0, "DTD_PACKAGING_DATA_APPS1_1_0", DataApps1Creator.class);
60     }
61
62
63     /**
64      *Constructor for the DataApps1Creator object
65      */

66     public DataApps1Creator() {
67         cl = DataApps1Creator.class;
68         prefix = "packaging_data_apps1";
69     }
70
71
72     /**
73      * Description of the Method
74      *
75      * @param target Description of the Parameter
76      * @param newversion Description of the Parameter
77      * @return Description of the Return Value
78      */

79     public boolean createPackage(Target target, int newversion) {
80
81         clearPackageSteps();
82
83         // step1
84
packageStep step = getNextPackageStep();
85         step.setUserFeedBack("data/apps1 packager started");
86
87         String JavaDoc datafile = target.getBaseDir() + getItemStringValue(target, "datafile");
88         //String datadir = target.getBaseDir() + getItemStringValue(target, "datadir");
89
String JavaDoc datadir = datafile.substring(0,datafile.length()-8);
90
91         boolean dataexport = false;
92     if (getItemStringValue(target, "dataexport").equals("true")) {
93         dataexport = true;
94     }
95
96         step = getNextPackageStep();
97         step.setUserFeedBack("used datafile : " + datafile);
98         //step = getNextPackageStep();
99
//step.setUserFeedBack("used datadir : " + datadir);
100
step = getNextPackageStep();
101         step.setUserFeedBack("used dataexport :" + dataexport);
102
103         String JavaDoc newfilename = getBuildPath() + getName(target).replace(' ', '_') + "@" + getMaintainer(target) + "_data_apps1_" + newversion;
104         try {
105             JarOutputStream JavaDoc jarfile = new JarOutputStream JavaDoc(new FileOutputStream JavaDoc(newfilename + ".tmp"), new Manifest JavaDoc());
106
107         if (dataexport) {
108                 step = getNextPackageStep();
109             step.setUserFeedBack("exporting dataset ...");
110             if (exportDataSet(step,target,datafile,datadir)) {
111                     step.setUserFeedBack("creating dataset ...done");
112             } else {
113                     step.setUserFeedBack("creating dataset ...failed");
114             }
115         }
116
117             step = getNextPackageStep();
118             step.setUserFeedBack("creating package.xml file...");
119             createPackageMetaFile(jarfile, target, newversion);
120             step.setUserFeedBack("creating package.xml file...done");
121             step = getNextPackageStep();
122             step.setUserFeedBack("creating depends.xml file...");
123             createDependsMetaFile(jarfile, target);
124             step.setUserFeedBack("creating depends.xml file...done");
125
126             addFile(jarfile, datafile, "data.xml", "data", "");
127
128             addFiles(jarfile, datadir, ".xml", "", "data", "");
129             addFiles(jarfile, datadir, ".handle", "", "data", "");
130             jarfile.close();
131         } catch (Exception JavaDoc e) {
132             e.printStackTrace();
133         }
134
135
136         // update the build file to reflect the last build, should only be done if no errors
137
if (getErrorCount() == 0) {
138         if (renameTempFile(newfilename)) {
139                 updatePackageTime(target, new Date JavaDoc(), newversion);
140                 target.save();
141         }
142         }
143
144     // do we need to send this to a publish provider ?
145
if (target.getPublishState()) {
146                 ProviderManager.resetSleepCounter();
147             step=getNextPackageStep();
148             step.setUserFeedBack("publishing to provider : "+target.getPublishProvider());
149             step=getNextPackageStep();
150             step.setUserFeedBack("sending file : "+target.getId()+" ...");
151         if (target.publish(newversion,step)) {
152                 step.setUserFeedBack("sending file : "+target.getId()+" ... done");
153         } else {
154                 step.setUserFeedBack("sending file : "+target.getId()+" ... failed");
155         }
156     }
157
158         step = getNextPackageStep();
159         step.setUserFeedBack("data/apps1 packager ended : " + getErrorCount() + " errors and " + getWarningCount() + " warnings");
160         return true;
161     }
162
163
164     /**
165      * Description of the Method
166      *
167      * @param target Description of the Parameter
168      * @return Description of the Return Value
169      */

170     public boolean decodeItems(Target target) {
171         super.decodeItems(target);
172         decodeStringItem(target, "datacreator");
173         decodeStringItem(target, "datafile");
174         decodeStringItem(target, "datadir");
175         decodeStringItem(target, "dataexport");
176         decodeDataFile(target,target.getBaseDir() + getItemStringValue(target, "datafile"));
177         return true;
178     }
179
180
181     /**
182      * Gets the xMLFile attribute of the DataApps1Creator object
183      *
184      * @param target Description of the Parameter
185      * @return The xMLFile value
186      */

187     public String JavaDoc getXMLFile(Target target) {
188         String JavaDoc body = getDefaultXMLHeader(target);
189         body += getDefaultXMLMetaInfo(target);
190         //body += "\t<datacreator>" + getItemStringValue(target, "datacreator") + "</datacreator>\n";
191
body += "\t<datafile>" + getItemStringValue(target, "datafile") + "</datafile>\n";
192         //body += "\t<datadir>" + getItemStringValue(target, "datadir") + "</datadir>\n";
193
body += "\t<dataexport>" + getItemStringValue(target, "dataexport") + "</dataexport>\n";
194         body += getPackageDependsXML(target);
195         body += getRelatedPeopleXML("initiators", "initiator", target);
196         body += getRelatedPeopleXML("supporters", "supporter", target);
197         body += getRelatedPeopleXML("developers", "developer", target);
198         body += getRelatedPeopleXML("contacts", "contact", target);
199     if (target.getPublishProvider()!=null) {
200         if (target.getPublishState()) {
201             body+="\t<publishprovider name=\""+target.getPublishProvider()+"\" state=\"active\" sharepassword=\""+target.getPublishSharePassword()+"\" />\n";
202         } else {
203             body+="\t<publishprovider name=\""+target.getPublishProvider()+"\" state=\"inactive\" sharepassword=\""+target.getPublishSharePassword()+"\" />\n";
204         }
205     }
206         body += getDefaultXMLFooter(target);
207         return body;
208     }
209
210
211     /**
212      * Sets the defaults attribute of the DataApps1Creator object
213      *
214      * @param target The new defaults value
215      */

216     public void setDefaults(Target target) {
217         target.setItem("datafile", "datasets/example/data.xml");
218         //target.setItem("datadir", "datasets/example/data/");
219
target.setItem("dataexport", "false");
220     }
221
222     private boolean decodeDataFile(Target target,String JavaDoc datafile) {
223         File JavaDoc file = new File JavaDoc(datafile);
224         if (file.exists()) {
225             ExtendedDocumentReader reader = new ExtendedDocumentReader(datafile,DataApps1Package.class);
226             if (reader != null) {
227                 org.w3c.dom.Node JavaDoc dc=reader.getElementByPath("dataset.selection");
228         if (dc!=null) {
229                     NamedNodeMap JavaDoc nm=dc.getAttributes();
230                     if (nm!=null) {
231                                 org.w3c.dom.Node JavaDoc n3=nm.getNamedItem("type");
232                             if (n3!=null) {
233                     String JavaDoc type=n3.getNodeValue();
234                     target.setItem("datatype",type);
235                     // this should be in sepr.files
236
target.setItem("type",type);
237                     if (type.equals("depth")) decodeDepthItems(target,reader);
238                 }
239             }
240         }
241         }
242     }
243     return true;
244     }
245
246     private void decodeDepthItems(Target target,ExtendedDocumentReader reader) {
247
248         org.w3c.dom.Node JavaDoc n2=reader.getElementByPath("dataset.selection.model");
249     if (n2!=null) {
250             NamedNodeMap JavaDoc nm=n2.getAttributes();
251             if (nm!=null) {
252                     org.w3c.dom.Node JavaDoc n3=nm.getNamedItem("name");
253                     if (n3!=null) target.setItem("depthname",n3.getNodeValue());
254                     n3=nm.getNamedItem("maintainer");
255                     if (n3!=null) target.setItem("depthmaintainer",n3.getNodeValue());
256                     n3=nm.getNamedItem("version");
257                     if (n3!=null) target.setItem("depthversion",n3.getNodeValue());
258         }
259     }
260
261         n2=reader.getElementByPath("dataset.selection.startnode");
262     if (n2!=null) {
263             NamedNodeMap JavaDoc nm=n2.getAttributes();
264             if (nm!=null) {
265                     org.w3c.dom.Node JavaDoc n3=nm.getNamedItem("alias");
266                     if (n3!=null) target.setItem("depthalias",n3.getNodeValue());
267         }
268             n2=reader.getElementByPath("dataset.selection.startnode.builder");
269         if (n2!=null) target.setItem("depthbuilder",n2.getFirstChild().getNodeValue());
270             n2=reader.getElementByPath("dataset.selection.startnode.where");
271         if (n2!=null) target.setItem("depthwhere",n2.getFirstChild().getNodeValue());
272     }
273
274         n2=reader.getElementByPath("dataset.selection.depth");
275     if (n2!=null) target.setItem("depth",n2.getFirstChild().getNodeValue());
276    }
277     
278
279     private boolean exportDataSet(packageStep step,Target target,String JavaDoc datafile,String JavaDoc datadir) {
280     packageStep substep=step.getNextPackageStep();
281         substep.setUserFeedBack("reading data.xml : "+datafile);
282         File JavaDoc file = new File JavaDoc(datafile);
283         if (file.exists()) {
284             ExtendedDocumentReader reader = new ExtendedDocumentReader(datafile,DataApps1Package.class);
285             if (reader != null) {
286         substep=step.getNextPackageStep();
287             substep.setUserFeedBack("reader : "+reader);
288                 org.w3c.dom.Node JavaDoc dc=reader.getElementByPath("dataset.selection");
289                 NamedNodeMap JavaDoc nm=dc.getAttributes();
290                 if (nm!=null) {
291                        org.w3c.dom.Node JavaDoc n3=nm.getNamedItem("type");
292                        if (n3!=null) {
293                 String JavaDoc type=n3.getNodeValue();
294                 if (type.equals("depth")) {
295                     exportDataSetApps1(reader,dc,step,target,datafile,datadir);
296                 }
297                }
298         }
299         }
300         }
301     return true;
302     }
303
304     private boolean exportDataSetApps1(ExtendedDocumentReader reader,org.w3c.dom.Node JavaDoc dc,packageStep step,Target target,String JavaDoc datafile,String JavaDoc datadir) {
305         org.w3c.dom.Node JavaDoc n=reader.getElementByPath("dataset.selector.model");
306         NamedNodeMap JavaDoc nm=n.getAttributes();
307         if (nm!=null) {
308         String JavaDoc name = null;
309         String JavaDoc maintainer = null;
310         String JavaDoc version = null;
311                 org.w3c.dom.Node JavaDoc n3=nm.getNamedItem("name");
312                 if (n3!=null) {
313             name=n3.getNodeValue();
314         }
315                 n3=nm.getNamedItem("maintainer");
316                 if (n3!=null) {
317             maintainer=n3.getNodeValue();
318         }
319                 n3=nm.getNamedItem("version");
320                 if (n3!=null) {
321             version=n3.getNodeValue();
322         }
323
324         /*
325             org.w3c.dom.Node n2=reader.getElementByPath("datacreator.model.startnode");
326         if (n2!=null) {
327             String alias = null;
328             String builder = null;
329             String where = null;
330             String depth = null;
331                 nm=n2.getAttributes();
332                 if (nm!=null) {
333                 // needs the alias check
334                         n3=nm.getNamedItem("alias");
335                         if (n3!=null) {
336                     alias=n3.getNodeValue();
337                 }
338             }
339                 n3=reader.getElementByPath("datacreator.model.startnode.builder");
340             if (n3!=null) {
341                 builder = n3.getFirstChild().getNodeValue();
342             }
343                 n3=reader.getElementByPath("datacreator.model.startnode.where");
344             if (n3!=null) {
345                 where = n3.getFirstChild().getNodeValue();
346             }
347                 n3=reader.getElementByPath("datacreator.model.depth");
348             if (n3!=null) {
349                 depth = n3.getFirstChild().getNodeValue();
350             }
351             //log.info("alias="+alias+" builder="+builder+" where="+where+" depth="+depth);
352             Vector resultmsgs = new Vector();
353                 String id = name + "@" + maintainer + "_cloud/model";
354                 id = id.replace(' ', '_');
355                 id = id.replace('/', '_');
356             HashSet filters = getWantedBuilders(target,id);
357             Apps1DataWriter.write(filters,alias,builder,where,5,datafile,datadir);
358         }
359         */

360     }
361     return true;
362     }
363
364     private HashSet JavaDoc getWantedBuilders(Target target,String JavaDoc id) {
365     HashSet JavaDoc set = new HashSet JavaDoc();
366     Project prj = target.getParent();
367     Target mod = prj.getTargetById(id);
368     log.info("mod="+mod);
369     CloudModelCreator modcr = (CloudModelCreator)mod.getCreator();
370         Model model = new Model(modcr.getModelFile(mod));
371
372         Iterator JavaDoc nbl=model.getNeededBuilders();
373         while (nbl.hasNext()) {
374             NeededBuilder nb=(NeededBuilder)nbl.next();
375         int i=MMBase.getMMBase().getTypeDef().getIntValue(nb.getName());
376         set.add(new Integer JavaDoc(i));
377         }
378     return set;
379     }
380
381   public String JavaDoc getDefaultTargetName() {
382         return "data";
383   }
384
385     public MMObjectNode getTypeInfo(String JavaDoc project, String JavaDoc target) {
386         VirtualBuilder builder = new VirtualBuilder(MMBase.getMMBase());
387         MMObjectNode virtual = builder.getNewNode("admin");
388         Project p = ProjectManager.getProject(project);
389         if (p != null) {
390             Target t = p.getTarget(target);
391             if (t != null) {
392                     virtual.setValue("type", t.getItem("type"));
393                     virtual.setValue("depthname", t.getItem("depthname"));
394                     virtual.setValue("depthmaintainer", t.getItem("depthmaintainer"));
395                     virtual.setValue("depthversion", t.getItem("depthversion"));
396                     virtual.setValue("depthalias", t.getItem("depthalias"));
397                     virtual.setValue("depthbuilder", t.getItem("depthbuilder"));
398                     virtual.setValue("depthwhere", t.getItem("depthwhere"));
399                     virtual.setValue("depthcount", t.getItem("depth"));
400             }
401         }
402         return virtual;
403     }
404
405     public void setDataFileType(String JavaDoc project, String JavaDoc target,String JavaDoc type) {
406         Project p = ProjectManager.getProject(project);
407         if (p != null) {
408             Target t = p.getTarget(target);
409             if (t != null) {
410                     t.setItem("type",type);
411             saveDataFile(project,t);
412         }
413         }
414     }
415
416     private boolean saveDataFile(String JavaDoc project,Target target) {
417         String JavaDoc datafile = target.getBaseDir() + getItemStringValue(target, "datafile");
418         String JavaDoc id = target.getItem("depthname") + "@" + target.getItem("depthmaintainer") + "_cloud/model";
419         id = id.replace(' ', '_');
420         id = id.replace('/', '_');
421         HashSet JavaDoc filters = getWantedBuilders(target,id);
422         Apps1DataWriter.writeDataXML(filters,datafile,target);
423     return true;
424     }
425
426 }
427
428
Popular Tags