1 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 ; 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 name; 30 private String path; 31 private Document document; 32 private BuilderReader reader; 33 34 public CloudModelBuilder(String name) { 35 this.name = name; 36 } 37 38 public void setPath(String path) { 39 this.path = path; 40 } 41 42 public boolean writeToFile(String 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 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 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 fieldname,String country,String 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 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 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 newpart =" <guiname xml:lang=\""+country+"\">"+value+"</guiname>\r"; 109 mergePart(guinode,newpart); 110 save(); 111 } 112 } else { 113 String 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 fieldname,String 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 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 fieldname,String 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 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 fieldname,String 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 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 fieldname,String 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 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 name,String type,String guitype,String state,String required,String unique,String size) { 227 if (document == null) openDocument(); 228 Element fe = reader.getElementByPath(document.getDocumentElement(),"builder.fieldlist"); 229 if (fe!=null) { 230 String 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 newpart) { 252 try { 253 Element nf = (reader.getDocumentBuilder(false,null,null).parse(new InputSource (new StringReader(newpart)))).getDocumentElement(); 254 fe.appendChild(document.importNode(nf,true)); 255 } catch(Exception e) { 256 log.error("Can't merge new xml code"); 257 } 258 } 259 260 public boolean save() { 261 try { 263 ResourceLoader.getConfigurationRoot().storeDocument(path,document); 264 } catch(Exception 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 e) { 276 log.error("missing builderfile file : "+path); 277 e.printStackTrace(); 278 } 279 } 280 281 } 282 | Popular Tags |