KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > model > CloudModelBuilder


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
11 package org.mmbase.model;
12
13 import org.mmbase.util.logging.*;
14 import org.mmbase.core.*;
15 import org.mmbase.module.core.*;
16 import org.mmbase.util.*;
17 import org.mmbase.util.xml.*;
18
19 import org.w3c.dom.*;
20 import org.xml.sax.InputSource JavaDoc;
21 import javax.xml.parsers.*;
22
23 import java.util.*;
24 import java.io.*;
25
26 public class CloudModelBuilder {
27
28     private static Logger log = Logging.getLoggerInstance(CloudModelBuilder.class);
29     private String JavaDoc name;
30     private String JavaDoc path;
31     private Document document;
32     private BuilderReader reader;
33
34     public CloudModelBuilder(String JavaDoc name) {
35         this.name = name;
36     }
37
38     public void setPath(String JavaDoc path) {
39        this.path = path;
40     }
41
42     public boolean writeToFile(String JavaDoc filepath) {
43         InputStream in = ResourceLoader.getConfigurationRoot().getResourceAsStream(path);
44         if (in!=null) {
45            try {
46                 FileOutputStream out = new FileOutputStream(filepath);
47                 byte[] buf = new byte[1024];
48                 int len;
49                 while ((len = in.read(buf)) > 0) {
50                     out.write(buf, 0, len);
51                 }
52                 in.close();
53                 out.flush();
54                 out.close();
55             } catch(Exception JavaDoc e) {
56                 e.printStackTrace();
57                 return false;
58             }
59         } else {
60             log.error("Resource not found : "+path);
61         }
62         return true;
63     }
64
65     public boolean removeField(String JavaDoc name) {
66     if (document == null) openDocument();
67         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
68         if (fe != null) {
69             Iterator fields = reader.getChildElements(fe,"field");
70             while (fields.hasNext()) {
71                 Element field = (Element)fields.next();
72                 Element namenode = reader.getElementByPath(field,"field.db.name");
73                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(name)) {
74                     fe.removeChild(field);
75                     save();
76                 }
77             }
78         }
79         return true;
80     }
81
82
83     public boolean setGuiName(String JavaDoc fieldname,String JavaDoc country,String JavaDoc value) {
84     if (document == null) openDocument();
85         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
86         if (fe != null) {
87             Iterator fields = reader.getChildElements(fe,"field");
88             while (fields.hasNext()) {
89                 Element field = (Element)fields.next();
90                 Element namenode = reader.getElementByPath(field,"field.db.name");
91                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(fieldname)) {
92                        // that we have found the correct field find
93
// find the gui names
94
Element guinode = reader.getElementByPath(field,"field.gui");
95                        if (guinode != null) {
96                        Iterator guinames= reader.getChildElements(guinode,"guiname");
97                        boolean found = false;
98                        while (guinames.hasNext()) {
99                            Element guiname = (Element)guinames.next();
100                String JavaDoc oldcountry = guiname.getAttribute("xml:lang");
101                if (oldcountry!=null && oldcountry.equals(country)) {
102                 guiname.getFirstChild().setNodeValue(value);
103                             save();
104                 found = true;
105                }
106                        }
107                        if (!found) {
108                String JavaDoc newpart =" <guiname xml:lang=\""+country+"\">"+value+"</guiname>\r";
109                        mergePart(guinode,newpart);
110                            save();
111                        }
112                        } else {
113                            String JavaDoc newpart =" <gui>\r";
114                newpart +=" <guiname xml:lang=\""+country+"\">"+value+"</guiname>\r";
115                            newpart +=" </gui>\r";
116                        mergePart(field,newpart);
117                            save();
118                }
119                 }
120             }
121         }
122         return true;
123     }
124
125
126     public boolean setBuilderDBState(String JavaDoc fieldname,String JavaDoc value) {
127     if (document == null) openDocument();
128         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
129         if (fe != null) {
130             Iterator fields = reader.getChildElements(fe,"field");
131             while (fields.hasNext()) {
132                 Element field = (Element)fields.next();
133                 Element namenode = reader.getElementByPath(field,"field.db.name");
134                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(fieldname)) {
135                        // that we have found the correct field find
136
// find the type node
137
Element typenode = reader.getElementByPath(field,"field.db.type");
138                NamedNodeMap nnm = typenode.getAttributes();
139                if (nnm != null) {
140                 Node dbstate = nnm.getNamedItem("state");
141                 dbstate.getFirstChild().setNodeValue(value);
142                             save();
143                }
144                 }
145             }
146         }
147         return true;
148     }
149
150
151     public boolean setBuilderDBKey(String JavaDoc fieldname,String JavaDoc value) {
152     if (document == null) openDocument();
153         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
154         if (fe != null) {
155             Iterator fields = reader.getChildElements(fe,"field");
156             while (fields.hasNext()) {
157                 Element field = (Element)fields.next();
158                 Element namenode = reader.getElementByPath(field,"field.db.name");
159                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(fieldname)) {
160                        // that we have found the correct field find
161
// find the type node
162
Element typenode = reader.getElementByPath(field,"field.db.type");
163                NamedNodeMap nnm = typenode.getAttributes();
164                if (nnm != null) {
165                 Node key = nnm.getNamedItem("key");
166                 key.getFirstChild().setNodeValue(value);
167                             save();
168                }
169                 }
170             }
171         }
172         return true;
173     }
174
175
176     public boolean setBuilderDBNotNull(String JavaDoc fieldname,String JavaDoc value) {
177     if (document == null) openDocument();
178         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
179         if (fe != null) {
180             Iterator fields = reader.getChildElements(fe,"field");
181             while (fields.hasNext()) {
182                 Element field = (Element)fields.next();
183                 Element namenode = reader.getElementByPath(field,"field.db.name");
184                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(fieldname)) {
185                        // that we have found the correct field find
186
// find the type node
187
Element typenode = reader.getElementByPath(field,"field.db.type");
188                NamedNodeMap nnm = typenode.getAttributes();
189                if (nnm != null) {
190                 Node notnull = nnm.getNamedItem("notnull");
191                 notnull.getFirstChild().setNodeValue(value);
192                             save();
193                }
194                 }
195             }
196         }
197         return true;
198     }
199
200
201     public boolean setBuilderDBSize(String JavaDoc fieldname,String JavaDoc value) {
202     if (document == null) openDocument();
203         Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
204         if (fe != null) {
205             Iterator fields = reader.getChildElements(fe,"field");
206             while (fields.hasNext()) {
207                 Element field = (Element)fields.next();
208                 Element namenode = reader.getElementByPath(field,"field.db.name");
209                 if (namenode!=null && namenode.getFirstChild().getNodeValue().equals(fieldname)) {
210                        // that we have found the correct field find
211
// find the type node
212
Element typenode = reader.getElementByPath(field,"field.db.type");
213                NamedNodeMap nnm = typenode.getAttributes();
214                if (nnm != null) {
215                 Node dbsize = nnm.getNamedItem("size");
216                 dbsize.getFirstChild().setNodeValue(value);
217                             save();
218                }
219                 }
220             }
221         }
222         return true;
223     }
224
225
226     public boolean addField(int pos,String JavaDoc name,String JavaDoc type,String JavaDoc guitype,String JavaDoc state,String JavaDoc required,String JavaDoc unique,String JavaDoc size) {
227     if (document == null) openDocument();
228          Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist");
229         if (fe!=null) {
230             String JavaDoc newpart =" <field>\r";
231             newpart +=" <editor>\r";
232             newpart +=" <positions>\r";
233             newpart +=" <input>"+pos+"</input>\r";
234             newpart +=" <list>"+pos+"</list>\r";
235             newpart +=" <search>"+pos+"</search>\r";
236             newpart +=" </positions>\r";
237             newpart +=" </editor>\r";
238
239             newpart +=" <datatype base=\""+guitype+"\" xmlns=\"http://www.mmbase.org/xmlns/datatypes\"/>\r";
240             newpart +=" <db>\r";
241             newpart +=" <name>"+name+"</name>\r";
242             newpart +=" <type key=\""+unique+"\" notnull=\""+required+"\" size=\""+size+"\" state=\""+state+"\">"+type+"</type>\r";
243             newpart +=" </db>\r";
244             newpart +=" </field>\r";
245         mergePart(fe,newpart);
246         }
247         save();
248         return true;
249     }
250
251     private void mergePart(Element fe,String JavaDoc newpart) {
252             try {
253                 Element nf = (reader.getDocumentBuilder(false,null,null).parse(new InputSource JavaDoc(new StringReader(newpart)))).getDocumentElement();
254                 fe.appendChild(document.importNode(nf,true));
255             } catch(Exception JavaDoc e) {
256                 log.error("Can't merge new xml code");
257             }
258     }
259
260     public boolean save() {
261         // save the file back using the ResourceLoader
262
try {
263             ResourceLoader.getConfigurationRoot().storeDocument(path,document);
264         } catch(Exception JavaDoc e) {
265             e.printStackTrace();
266             return false;
267         }
268         return true;
269     }
270
271     private void openDocument() {
272        try {
273            document = ResourceLoader.getConfigurationRoot().getDocument(path);
274            reader = new BuilderReader(document,MMBase.getMMBase());
275        } catch (Exception JavaDoc e) {
276           log.error("missing builderfile file : "+path);
277           e.printStackTrace();
278        }
279    }
280
281 }
282
Popular Tags