KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > packaging > projects > editors > cloudmodel > Model


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.editors.cloudmodel;
8
9 import java.io.BufferedWriter JavaDoc;
10 import java.io.File JavaDoc;
11 import java.io.FileOutputStream JavaDoc;
12 import java.io.OutputStreamWriter JavaDoc;
13 import java.io.Writer JavaDoc;
14 import java.util.ArrayList JavaDoc;
15 import java.util.Enumeration JavaDoc;
16 import java.util.HashMap JavaDoc;
17 import java.util.Iterator JavaDoc;
18 import java.util.Map JavaDoc;
19
20 import org.mmbase.applications.packaging.util.ExtendedDocumentReader;
21 import org.mmbase.util.XMLEntityResolver;
22 import org.mmbase.util.logging.Logger;
23 import org.mmbase.util.logging.Logging;
24 import org.w3c.dom.Element JavaDoc;
25 import org.w3c.dom.NamedNodeMap JavaDoc;
26
27 /**
28  * DisplayHtmlPackage, Handler for html packages
29  *
30  * @author Daniel Ockeloen (MMBased)
31  */

32 public class Model {
33
34     private static Logger log = Logging.getLoggerInstance(Model.class);
35
36     /**
37      * Description of the Field
38      */

39     public final static String JavaDoc DTD_PACKAGING_CLOUD_MODEL_1_0 = "packaging_cloud_model_1_0.dtd";
40
41     public final static String JavaDoc DTD_BUILDER_1_1 = "builder_1_1.dtd";
42
43     /**
44      * Description of the Field
45      */

46     public final static String JavaDoc PUBLIC_ID_PACKAGING_CLOUD_MODEL_1_0 = "-//MMBase//DTD packaging_cloud_model config 1.0//EN";
47
48     public final static String JavaDoc PUBLIC_ID_BUILDER_1_1 = "-//MMBase//DTD builder config 1.1//EN";
49
50     private ArrayList JavaDoc neededbuilders = new ArrayList JavaDoc();
51
52     private ArrayList JavaDoc neededreldefs = new ArrayList JavaDoc();
53
54     private ArrayList JavaDoc allowedrelations = new ArrayList JavaDoc();
55
56     private String JavaDoc path;
57
58     /**
59      * Description of the Method
60      */

61     public static void registerPublicIDs() {
62         XMLEntityResolver.registerPublicID(PUBLIC_ID_PACKAGING_CLOUD_MODEL_1_0,
63                 "DTD_PACKAGING_CLOUD_MODEL_1_0", Model.class);
64         XMLEntityResolver.registerPublicID(PUBLIC_ID_BUILDER_1_1, "DTD_BUILDER_1_1", Model.class);
65     }
66
67     public Model(String JavaDoc modelfilename) {
68         modelfilename = modelfilename.replace('/', File.separatorChar);
69         modelfilename = modelfilename.replace('\\', File.separatorChar);
70         this.path = modelfilename;
71         readModel(modelfilename);
72     }
73
74     public Iterator JavaDoc getNeededBuilders() {
75         return neededbuilders.iterator();
76     }
77
78     public NeededBuilder getNeededBuilder(String JavaDoc buildername) {
79         Iterator JavaDoc nbl = getNeededBuilders();
80         while (nbl.hasNext()) {
81             NeededBuilder nb = (NeededBuilder) nbl.next();
82             if (nb.getName().equals(buildername)) { return nb; }
83         }
84         return null;
85     }
86
87     public Iterator JavaDoc getNeededRelDefs() {
88         return neededreldefs.iterator();
89     }
90
91     public Iterator JavaDoc getAllowedRelations() {
92         return allowedrelations.iterator();
93     }
94
95     public boolean addNeededBuilder(String JavaDoc builder, String JavaDoc maintainer, String JavaDoc version) {
96         NeededBuilder nb = new NeededBuilder();
97         nb.setName(builder);
98         nb.setMaintainer(maintainer);
99         nb.setVersion(version);
100         neededbuilders.add(nb);
101         writeModel();
102         return true;
103     }
104
105     public boolean deleteNeededBuilder(String JavaDoc builder, String JavaDoc maintainer, String JavaDoc version) {
106         Iterator JavaDoc nbl = getNeededBuilders();
107         while (nbl.hasNext()) {
108             NeededBuilder nb = (NeededBuilder) nbl.next();
109             if (nb.getName().equals(builder) && nb.getMaintainer().equals(maintainer)
110                     && nb.getVersion().equals(version)) {
111                 neededbuilders.remove(nb);
112                 writeModel();
113                 return true;
114             }
115         }
116         return false;
117     }
118
119     public boolean addNeededRelDef(String JavaDoc source, String JavaDoc target, String JavaDoc direction,
120             String JavaDoc guisourcename, String JavaDoc guitargetname, String JavaDoc builder) {
121         NeededRelDef nr = new NeededRelDef();
122         nr.setSource(source);
123         nr.setTarget(target);
124         nr.setDirection(direction);
125         nr.setGuiSourceName(guisourcename);
126         nr.setGuiTargetName(guitargetname);
127         nr.setBuilderName(builder);
128         neededreldefs.add(nr);
129         writeModel();
130         return true;
131     }
132
133     public boolean deleteNeededRelDef(String JavaDoc source, String JavaDoc target, String JavaDoc direction,
134             String JavaDoc guisourcename, String JavaDoc guitargetname, String JavaDoc builder) {
135         Iterator JavaDoc nrl = getNeededRelDefs();
136         while (nrl.hasNext()) {
137             NeededRelDef nr = (NeededRelDef) nrl.next();
138             if (nr.getSource().equals(source) && nr.getTarget().equals(target)
139                     && nr.getDirection().equals(direction)
140                     && nr.getGuiSourceName().equals(guitargetname)
141                     && nr.getGuiTargetName().equals(guitargetname)
142                     && nr.getBuilderName().equals(builder)) {
143                 allowedrelations.remove(nr);
144                 writeModel();
145                 return true;
146             }
147         }
148         return true;
149     }
150
151     public boolean addAllowedRelation(String JavaDoc from, String JavaDoc to, String JavaDoc type) {
152         AllowedRelation ar = new AllowedRelation();
153         ar.setFrom(from);
154         ar.setTo(to);
155         ar.setType(type);
156         allowedrelations.add(ar);
157         writeModel();
158         return true;
159     }
160
161     public boolean deleteAllowedRelation(String JavaDoc from, String JavaDoc to, String JavaDoc type) {
162         Iterator JavaDoc arl = getAllowedRelations();
163         while (arl.hasNext()) {
164             AllowedRelation ar = (AllowedRelation) arl.next();
165             if (ar.getFrom().equals(from) && ar.getTo().equals(to) && ar.getType().equals(type)) {
166                 allowedrelations.remove(ar);
167                 writeModel();
168                 return true;
169             }
170         }
171         return false;
172     }
173
174     private void readModel(String JavaDoc path) {
175         File JavaDoc file = new File JavaDoc(path);
176         if (file.exists()) {
177             ExtendedDocumentReader reader = new ExtendedDocumentReader(path, Model.class);
178             if (reader != null) {
179                 for (Iterator JavaDoc ns = reader.getChildElements("cloudmodel.neededbuilderlist",
180                         "builder"); ns.hasNext();) {
181                     Element JavaDoc n = (Element JavaDoc) ns.next();
182                     String JavaDoc name = reader.getElementValue(n);
183                     NeededBuilder nb = new NeededBuilder();
184                     nb.setName(name);
185                     NamedNodeMap JavaDoc nm = n.getAttributes();
186                     if (nm != null) {
187                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("version");
188                         if (n2 != null) {
189                             nb.setVersion(n2.getNodeValue());
190                         }
191                         n2 = nm.getNamedItem("maintainer");
192                         if (n2 != null) {
193                             nb.setMaintainer(n2.getNodeValue());
194                         }
195                     }
196                     neededbuilders.add(nb);
197                     // try to find if this is defined in a real file
198
readBuilder(nb);
199                 }
200                 for (Iterator JavaDoc ns = reader.getChildElements("cloudmodel.neededreldeflist", "reldef"); ns
201                         .hasNext();) {
202                     Element JavaDoc n = (Element JavaDoc) ns.next();
203                     NeededRelDef nr = new NeededRelDef();
204                     NamedNodeMap JavaDoc nm = n.getAttributes();
205                     if (nm != null) {
206                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("source");
207                         if (n2 != null) {
208                             nr.setSource(n2.getNodeValue());
209                         }
210                         n2 = nm.getNamedItem("target");
211                         if (n2 != null) {
212                             nr.setTarget(n2.getNodeValue());
213                         }
214                         n2 = nm.getNamedItem("direction");
215                         if (n2 != null) {
216                             nr.setDirection(n2.getNodeValue());
217                         }
218                         n2 = nm.getNamedItem("guisourcename");
219                         if (n2 != null) {
220                             nr.setGuiSourceName(n2.getNodeValue());
221                         }
222                         n2 = nm.getNamedItem("guitargetname");
223                         if (n2 != null) {
224                             nr.setGuiTargetName(n2.getNodeValue());
225                         }
226                         n2 = nm.getNamedItem("builder");
227                         if (n2 != null) {
228                             nr.setBuilderName(n2.getNodeValue());
229                         }
230                     }
231                     neededreldefs.add(nr);
232                 }
233
234                 for (Iterator JavaDoc ns = reader.getChildElements("cloudmodel.allowedrelationlist",
235                         "relation"); ns.hasNext();) {
236                     Element JavaDoc n = (Element JavaDoc) ns.next();
237                     AllowedRelation ar = new AllowedRelation();
238                     NamedNodeMap JavaDoc nm = n.getAttributes();
239                     if (nm != null) {
240                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("from");
241                         if (n2 != null) {
242                             ar.setFrom(n2.getNodeValue());
243                         }
244                         n2 = nm.getNamedItem("to");
245                         if (n2 != null) {
246                             ar.setTo(n2.getNodeValue());
247                         }
248                         n2 = nm.getNamedItem("type");
249                         if (n2 != null) {
250                             ar.setType(n2.getNodeValue());
251                         }
252                     }
253                     allowedrelations.add(ar);
254                 }
255             }
256         }
257     }
258
259     private void readBuilder(NeededBuilder nb) {
260         String JavaDoc builderpath = path.substring(0, path.length() - 4) + "/" + nb.getName() + ".xml";
261         File JavaDoc file = new File JavaDoc(builderpath);
262         if (file.exists()) {
263             ExtendedDocumentReader reader = new ExtendedDocumentReader(builderpath, Model.class);
264             if (reader != null) {
265                 org.w3c.dom.Node JavaDoc n = reader.getElementByPath("builder");
266                 if (n != null) {
267                     NamedNodeMap JavaDoc nm = n.getAttributes();
268                     if (nm != null) {
269                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("name");
270                         if (n2 != null) {
271                             nb.setName(n2.getNodeValue());
272                         }
273                         n2 = nm.getNamedItem("maintainer");
274                         if (n2 != null) {
275                             nb.setMaintainer(n2.getNodeValue());
276                         }
277                         n2 = nm.getNamedItem("version");
278                         if (n2 != null) {
279                             nb.setVersion(n2.getNodeValue());
280                         }
281                         n2 = nm.getNamedItem("extends");
282                         if (n2 != null) {
283                             nb.setExtends(n2.getNodeValue());
284                         }
285                     }
286                 }
287                 n = reader.getElementByPath("builder.status");
288                 if (n != null) {
289                     org.w3c.dom.Node JavaDoc n2 = n.getFirstChild();
290                     if (n2 != null) {
291                         nb.setStatus(n2.getNodeValue());
292                     }
293                 }
294                 n = reader.getElementByPath("builder.searchage");
295                 if (n != null) {
296                     org.w3c.dom.Node JavaDoc n2 = n.getFirstChild();
297                     if (n2 != null) {
298                         nb.setSearchAge(n2.getNodeValue());
299                     }
300                 }
301                 n = reader.getElementByPath("builder.classfile");
302                 if (n != null) {
303                     org.w3c.dom.Node JavaDoc n2 = n.getFirstChild();
304                     if (n2 != null) {
305                         nb.setClassName(n2.getNodeValue());
306                     }
307                 }
308                 for (Iterator JavaDoc ns = reader.getChildElements("builder.names", "singular"); ns
309                         .hasNext();) {
310                     Element JavaDoc n4 = (Element JavaDoc) ns.next();
311                     String JavaDoc name = reader.getElementValue(n4);
312                     NamedNodeMap JavaDoc nm = n4.getAttributes();
313                     if (nm != null) {
314                         String JavaDoc language = "unknown";
315                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("xml:lang");
316                         if (n2 != null) {
317                             language = n2.getNodeValue();
318                         }
319                         nb.setSingularName(language, name);
320                     }
321                 }
322                 for (Iterator JavaDoc ns = reader.getChildElements("builder.names", "plural"); ns.hasNext();) {
323                     Element JavaDoc n4 = (Element JavaDoc) ns.next();
324                     String JavaDoc name = reader.getElementValue(n4);
325                     NamedNodeMap JavaDoc nm = n4.getAttributes();
326                     if (nm != null) {
327                         String JavaDoc language = "unknown";
328                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("xml:lang");
329                         if (n2 != null) {
330                             language = n2.getNodeValue();
331                         }
332                         nb.setPluralName(language, name);
333                     }
334                 }
335                 for (Iterator JavaDoc ns = reader.getChildElements("builder.descriptions", "description"); ns
336                         .hasNext();) {
337                     Element JavaDoc n4 = (Element JavaDoc) ns.next();
338                     String JavaDoc description = reader.getElementValue(n4);
339                     NamedNodeMap JavaDoc nm = n4.getAttributes();
340                     if (nm != null) {
341                         String JavaDoc language = "unknown";
342                         org.w3c.dom.Node JavaDoc n2 = nm.getNamedItem("xml:lang");
343                         if (n2 != null) {
344                             language = n2.getNodeValue();
345                         }
346                         nb.setDescription(language, description);
347                     }
348                 }
349                 for (Iterator JavaDoc ns = reader.getChildElements("builder.fieldlist", "field"); ns
350                         .hasNext();) {
351                     Element JavaDoc n4 = (Element JavaDoc) ns.next();
352                     decodeField(nb, n4);
353                 }
354             }
355         }
356     }
357
358     private void decodeField(NeededBuilder nb, Element JavaDoc n) {
359         NeededBuilderField nbf = new NeededBuilderField();
360         org.w3c.dom.NodeList JavaDoc l = n.getElementsByTagName("description");
361         for (int i = 0; i < l.getLength(); i++) {
362             org.w3c.dom.Node JavaDoc n2 = l.item(i);
363             NamedNodeMap JavaDoc nm = n2.getAttributes();
364             if (nm != null) {
365                 org.w3c.dom.Node JavaDoc n3 = nm.getNamedItem("xml:lang");
366                 if (n3 != null) {
367                     nbf.setDescription(n3.getNodeValue(), n2.getFirstChild().getNodeValue());
368                 }
369             }
370         }
371         l = n.getElementsByTagName("guiname");
372         for (int i = 0; i < l.getLength(); i++) {
373             org.w3c.dom.Node JavaDoc n2 = l.item(i);
374             NamedNodeMap JavaDoc nm = n2.getAttributes();
375             if (nm != null) {
376                 org.w3c.dom.Node JavaDoc n3 = nm.getNamedItem("xml:lang");
377                 if (n3 != null) {
378                     nbf.setGuiName(n3.getNodeValue(), n2.getFirstChild().getNodeValue());
379                 }
380             }
381         }
382         l = n.getElementsByTagName("guitype");
383         if (l.getLength() > 0) {
384             org.w3c.dom.Node JavaDoc n2 = l.item(0);
385             if (n2 != null) {
386                 nbf.setGuiType(n2.getFirstChild().getNodeValue());
387             }
388         }
389         l = n.getElementsByTagName("input");
390         if (l.getLength() > 0) {
391             org.w3c.dom.Node JavaDoc n2 = l.item(0);
392             if (n2 != null) {
393                 try {
394                     nbf.setEditorInputPos(Integer.parseInt(n2.getFirstChild().getNodeValue()));
395                 }
396                 catch (Exception JavaDoc e) {
397                     log.info("builder.field.editor.input not a number");
398                 }
399             }
400         }
401         l = n.getElementsByTagName("list");
402         if (l.getLength() > 0) {
403             org.w3c.dom.Node JavaDoc n2 = l.item(0);
404             if (n2 != null) {
405                 try {
406                     nbf.setEditorListPos(Integer.parseInt(n2.getFirstChild().getNodeValue()));
407                 }
408                 catch (Exception JavaDoc e) {
409                     log.info("builder.field.editor.list not a number");
410                 }
411             }
412         }
413         l = n.getElementsByTagName("search");
414         if (l.getLength() > 0) {
415             org.w3c.dom.Node JavaDoc n2 = l.item(0);
416             if (n2 != null) {
417                 try {
418                     nbf.setEditorSearchPos(Integer.parseInt(n2.getFirstChild().getNodeValue()));
419                 }
420                 catch (Exception JavaDoc e) {
421                     log.info("builder.field.editor.search not a number");
422                 }
423             }
424         }
425         l = n.getElementsByTagName("name");
426         if (l.getLength() > 0) {
427             org.w3c.dom.Node JavaDoc n2 = l.item(0);
428             if (n2 != null) {
429                 nbf.setDBName(n2.getFirstChild().getNodeValue());
430             }
431         }
432         l = n.getElementsByTagName("type");
433         if (l.getLength() > 0) {
434             org.w3c.dom.Node JavaDoc n2 = l.item(0);
435             if (n2 != null) {
436                 nbf.setDBType(n2.getFirstChild().getNodeValue());
437             }
438             NamedNodeMap JavaDoc nm = n2.getAttributes();
439             if (nm != null) {
440                 org.w3c.dom.Node JavaDoc n3 = nm.getNamedItem("state");
441                 if (n3 != null) {
442                     nbf.setDBState(n3.getNodeValue());
443                 }
444                 n3 = nm.getNamedItem("size");
445                 if (n3 != null) {
446                     try {
447                         nbf.setDBSize(Integer.parseInt(n3.getNodeValue()));
448                     }
449                     catch (Exception JavaDoc e) {
450                         log.info("builder.field.editor.search not a number");
451                     }
452                 }
453                 n3 = nm.getNamedItem("key");
454                 if (n3 != null) {
455                     if (n3.getNodeValue().equals("true") || n3.getNodeValue().equals("TRUE")) {
456                         nbf.setDBKey(true);
457                     }
458                     else {
459                         nbf.setDBKey(false);
460                     }
461                 }
462                 n3 = nm.getNamedItem("notnull");
463                 if (n3 != null) {
464                     if (n3.getNodeValue().equals("true") || n3.getNodeValue().equals("TRUE")) {
465                         nbf.setDBNotNull(true);
466                     }
467                     else {
468                         nbf.setDBNotNull(false);
469                     }
470                 }
471             }
472         }
473         nb.addField(nbf);
474
475     }
476
477     public boolean writeModel() {
478         String JavaDoc body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
479         body += "<!DOCTYPE cloudmodel PUBLIC \"-//MMBase/DTD cloudmodel 1.0//EN\" \"http://www.mmbase.org/dtd/cloudmodel_1_0.dtd\">\n";
480
481         body += "<cloudmodel>\n";
482         body += "\t<neededbuilderlist>\n";
483         Iterator JavaDoc nbl = getNeededBuilders();
484         while (nbl.hasNext()) {
485             NeededBuilder nb = (NeededBuilder) nbl.next();
486             body += "\t\t<builder maintainer=\"" + nb.getMaintainer() + "\" version=\""
487                     + nb.getVersion() + "\">" + nb.getName() + "</builder>\n";
488             writeBuilder(nb);
489         }
490         body += "\t</neededbuilderlist>\n\n";
491
492         body += "\t<neededreldeflist>\n";
493         Iterator JavaDoc rdl = getNeededRelDefs();
494         while (rdl.hasNext()) {
495             NeededRelDef nr = (NeededRelDef) rdl.next();
496             body += "\t\t<reldef source=\"" + nr.getSource() + "\" target=\"" + nr.getTarget()
497                     + "\" direction=\"" + nr.getDirection() + "\" guisourcename=\""
498                     + nr.getGuiSourceName() + "\" guitargetname=\"" + nr.getGuiTargetName()
499                     + "\" builder=\"" + nr.getBuilderName() + "\" />\n";
500         }
501         body += "\t</neededreldeflist>\n\n";
502
503         body += "\t<allowedrelationlist>\n";
504         Iterator JavaDoc arl = getAllowedRelations();
505         while (arl.hasNext()) {
506             AllowedRelation ar = (AllowedRelation) arl.next();
507             body += "\t\t<relation from=\"" + ar.getFrom() + "\" to=\"" + ar.getTo() + "\" type=\""
508                     + ar.getType() + "\" />\n";
509
510         }
511         body += "\t</allowedrelationlist>\n\n";
512
513         body += "</cloudmodel>\n";
514
515         // check if the dirs are created, if not create them
516
String JavaDoc dirsp = path.substring(0, path.lastIndexOf(File.separator));
517         File JavaDoc dirs = new File JavaDoc(dirsp);
518         if (!dirs.exists()) {
519             dirs.mkdirs();
520         }
521
522         // write back to disk
523
try {
524             Writer JavaDoc out = new BufferedWriter JavaDoc(new OutputStreamWriter JavaDoc(new FileOutputStream JavaDoc(path),
525                     "UTF8"));
526             out.write(body);
527             out.flush();
528             out.close();
529         }
530         catch (Exception JavaDoc e) {
531             log.error(Logging.stackTrace(e));
532         }
533         return true;
534     }
535
536     private boolean writeBuilder(NeededBuilder nb) {
537         String JavaDoc builderpath = path.substring(0, path.length() - 4) + "/" + nb.getName() + ".xml";
538         String JavaDoc body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
539         body += "<!DOCTYPE builder PUBLIC \"-//MMBase/DTD builder 1.1//EN\" \"http://www.mmbase.org/dtd/builder_1_1.dtd\">\n";
540
541         body += "<builder name=\"" + nb.getName() + "\" maintainer=\"" + nb.getMaintainer()
542                 + "\" version=\"" + nb.getVersion() + "\" extends=\"" + nb.getExtends() + "\">\n";
543         body += "\t<status>" + nb.getStatus() + "</status>\n";
544         if (!nb.getClassName().equals("Dummy")) {
545             body += "\t<classfile>" + nb.getClassName() + "</classfile>\n";
546         }
547         body += "\t<searchage>" + nb.getSearchAge() + "</searchage>\n";
548         body += "\t<names>\n";
549         body += "\t\t<!-- singles per language as defined by ISO 639 -->\n";
550         HashMap JavaDoc sn = nb.getSingularNames();
551         Iterator JavaDoc snk = sn.entrySet().iterator();
552         while (snk.hasNext()) {
553             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) snk.next();
554             String JavaDoc key = (String JavaDoc) entry.getKey();
555             String JavaDoc value = (String JavaDoc) entry.getValue();
556             body += "\t\t<singular xml:lang=\"" + key + "\">" + value + "</singular>\n";
557         }
558         body += "\t\t<!-- singles per language as defined by ISO 639 -->\n";
559         HashMap JavaDoc pn = nb.getPluralNames();
560         Iterator JavaDoc pnk = pn.entrySet().iterator();
561         while (pnk.hasNext()) {
562             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) pnk.next();
563             String JavaDoc key = (String JavaDoc) entry.getKey();
564             String JavaDoc value = (String JavaDoc) entry.getValue();
565             body += "\t\t<plural xml:lang=\"" + key + "\">" + value + "</plural>\n";
566         }
567         body += "\t</names>\n";
568         body += "\t<!-- <descriptions> small description of the builder for human reading -->\n";
569         body += "\t<descriptions>\n";
570         Map JavaDoc de = nb.getDescriptions();
571         Iterator JavaDoc dek = de.entrySet().iterator();
572         while (dek.hasNext()) {
573             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) dek.next();
574             String JavaDoc key = (String JavaDoc) entry.getKey();
575             String JavaDoc value = (String JavaDoc) entry.getValue();
576             body += "\t\t<description xml:lang=\"" + key + "\">" + value + "</description>\n";
577         }
578         body += "\t</descriptions>\n";
579         body += "\t<fieldlist>\n";
580         Iterator JavaDoc fl = nb.getFields();
581         int pos = 3;
582         while (fl.hasNext()) {
583             NeededBuilderField nbf = (NeededBuilderField) fl.next();
584             body += "\t\t<!-- POS " + (pos++) + " : <field> '" + nbf.getDBName() + "' -->\n";
585             body += "\t\t<field>\n";
586             body += "\t\t\t<descriptions>\n";
587
588             de = nbf.getDescriptions();
589             dek = de.entrySet().iterator();
590             while (dek.hasNext()) {
591                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) dek.next();
592                 String JavaDoc key = (String JavaDoc) entry.getKey();
593                 String JavaDoc value = (String JavaDoc) entry.getValue();
594                 body += "\t\t\t\t<description xml:lang=\"" + key + "\">" + value
595                         + "</description>\n";
596             }
597             body += "\t\t\t</descriptions>\n";
598             body += "\t\t\t<gui>\n";
599             de = nbf.getGuiNames();
600             dek = de.entrySet().iterator();
601             while (dek.hasNext()) {
602                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) dek.next();
603                 String JavaDoc key = (String JavaDoc) entry.getKey();
604                 String JavaDoc value = (String JavaDoc) entry.getValue();
605                 body += "\t\t\t\t<guiname xml:lang=\"" + key + "\">" + value + "</guiname>\n";
606             }
607             body += "\t\t\t\t<guitype>" + nbf.getGuiType() + "</guitype>\n";
608             body += "\t\t\t</gui>\n";
609             body += "\t\t\t<!-- editor related -->\n";
610             body += "\t\t\t<editor>\n";
611             body += "\t\t\t\t<positions>\n";
612             body += "\t\t\t\t\t<!-- position in the input area of the editor -->\n";
613             body += "\t\t\t\t\t<input>" + nbf.getEditorInputPos() + "</input>\n";
614             body += "\t\t\t\t\t<!-- position in list area of the editor -->\n";
615             body += "\t\t\t\t\t<list>" + nbf.getEditorListPos() + "</list>\n";
616             body += "\t\t\t\t\t<!-- position in search area of the editor -->\n";
617             body += "\t\t\t\t\t<search>" + nbf.getEditorSearchPos() + "</search>\n";
618
619             body += "\t\t\t\t</positions>\n";
620             body += "\t\t\t</editor>\n";
621             body += "\t\t\t<!-- database related -->\n";
622             body += "\t\t\t<db>\n";
623             body += "\t\t\t\t<!-- name of the field in the database -->\n";
624             body += "\t\t\t\t<name>" + nbf.getDBName() + "</name>\n";
625             body += "\t\t\t\t<!-- MMBase datatype and demands on it -->\n";
626             if (nbf.getDBSize() == -1) {
627                 body += "\t\t\t\t<type state=\"" + nbf.getDBState() + "\" notnull=\""
628                         + nbf.getDBNotNull() + "\" key=\"" + nbf.getDBKey() + "\">"
629                         + nbf.getDBType() + "</type>\n";
630             }
631             else {
632                 body += "\t\t\t\t<type state=\"" + nbf.getDBState() + "\" size=\""
633                         + nbf.getDBSize() + "\" notnull=\"" + nbf.getDBNotNull() + "\" key=\""
634                         + nbf.getDBKey() + "\">" + nbf.getDBType() + "</type>\n";
635             }
636             body += "\t\t\t</db>\n";
637             body += "\t\t</field>\n";
638         }
639         body += "\t</fieldlist>\n";
640         body += "</builder>\n";
641
642         // check if the dirs are created, if not create them
643
String JavaDoc dirsp = builderpath.substring(0, builderpath.lastIndexOf(File.separator));
644         File JavaDoc dirs = new File JavaDoc(dirsp);
645         if (!dirs.exists()) {
646             dirs.mkdirs();
647         }
648
649         // write back to disk
650
try {
651             Writer JavaDoc out = new BufferedWriter JavaDoc(new OutputStreamWriter JavaDoc(
652                     new FileOutputStream JavaDoc(builderpath), "UTF8"));
653             out.write(body);
654             out.flush();
655             out.close();
656         }
657         catch (Exception JavaDoc e) {
658             log.error(Logging.stackTrace(e));
659         }
660         return true;
661     }
662
663 }
664
Popular Tags