1 7 package org.mmbase.applications.packaging.projects.creators; 8 9 import java.io.File ; 10 import java.io.FileOutputStream ; 11 import java.util.Date ; 12 import java.util.HashSet ; 13 import java.util.Iterator ; 14 import java.util.jar.JarOutputStream ; 15 import java.util.jar.Manifest ; 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 ; 34 35 40 public class DataApps1Creator extends BasicCreator implements CreatorInterface { 41 42 private static Logger log = Logging.getLoggerInstance(DataApps1Creator.class); 43 44 47 public final static String DTD_PACKAGING_DATA_APPS1_1_0 = "packaging_data_apps1_1_0.dtd"; 48 49 52 public final static String PUBLIC_ID_PACKAGING_DATA_APPS1_1_0 = "-//MMBase//DTD packaging_data_apps1 config 1.0//EN"; 53 54 55 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 66 public DataApps1Creator() { 67 cl = DataApps1Creator.class; 68 prefix = "packaging_data_apps1"; 69 } 70 71 72 79 public boolean createPackage(Target target, int newversion) { 80 81 clearPackageSteps(); 82 83 packageStep step = getNextPackageStep(); 85 step.setUserFeedBack("data/apps1 packager started"); 86 87 String datafile = target.getBaseDir() + getItemStringValue(target, "datafile"); 88 String 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(); 101 step.setUserFeedBack("used dataexport :" + dataexport); 102 103 String newfilename = getBuildPath() + getName(target).replace(' ', '_') + "@" + getMaintainer(target) + "_data_apps1_" + newversion; 104 try { 105 JarOutputStream jarfile = new JarOutputStream (new FileOutputStream (newfilename + ".tmp"), new Manifest ()); 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 e) { 132 e.printStackTrace(); 133 } 134 135 136 if (getErrorCount() == 0) { 138 if (renameTempFile(newfilename)) { 139 updatePackageTime(target, new Date (), newversion); 140 target.save(); 141 } 142 } 143 144 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 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 187 public String getXMLFile(Target target) { 188 String body = getDefaultXMLHeader(target); 189 body += getDefaultXMLMetaInfo(target); 190 body += "\t<datafile>" + getItemStringValue(target, "datafile") + "</datafile>\n"; 192 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 216 public void setDefaults(Target target) { 217 target.setItem("datafile", "datasets/example/data.xml"); 218 target.setItem("dataexport", "false"); 220 } 221 222 private boolean decodeDataFile(Target target,String datafile) { 223 File file = new File (datafile); 224 if (file.exists()) { 225 ExtendedDocumentReader reader = new ExtendedDocumentReader(datafile,DataApps1Package.class); 226 if (reader != null) { 227 org.w3c.dom.Node dc=reader.getElementByPath("dataset.selection"); 228 if (dc!=null) { 229 NamedNodeMap nm=dc.getAttributes(); 230 if (nm!=null) { 231 org.w3c.dom.Node n3=nm.getNamedItem("type"); 232 if (n3!=null) { 233 String type=n3.getNodeValue(); 234 target.setItem("datatype",type); 235 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 n2=reader.getElementByPath("dataset.selection.model"); 249 if (n2!=null) { 250 NamedNodeMap nm=n2.getAttributes(); 251 if (nm!=null) { 252 org.w3c.dom.Node 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 nm=n2.getAttributes(); 264 if (nm!=null) { 265 org.w3c.dom.Node 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 datafile,String datadir) { 280 packageStep substep=step.getNextPackageStep(); 281 substep.setUserFeedBack("reading data.xml : "+datafile); 282 File file = new File (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 dc=reader.getElementByPath("dataset.selection"); 289 NamedNodeMap nm=dc.getAttributes(); 290 if (nm!=null) { 291 org.w3c.dom.Node n3=nm.getNamedItem("type"); 292 if (n3!=null) { 293 String 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 dc,packageStep step,Target target,String datafile,String datadir) { 305 org.w3c.dom.Node n=reader.getElementByPath("dataset.selector.model"); 306 NamedNodeMap nm=n.getAttributes(); 307 if (nm!=null) { 308 String name = null; 309 String maintainer = null; 310 String version = null; 311 org.w3c.dom.Node 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 360 } 361 return true; 362 } 363 364 private HashSet getWantedBuilders(Target target,String id) { 365 HashSet set = new HashSet (); 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 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 (i)); 377 } 378 return set; 379 } 380 381 public String getDefaultTargetName() { 382 return "data"; 383 } 384 385 public MMObjectNode getTypeInfo(String project, String 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 project, String target,String 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 project,Target target) { 417 String datafile = target.getBaseDir() + getItemStringValue(target, "datafile"); 418 String id = target.getItem("depthname") + "@" + target.getItem("depthmaintainer") + "_cloud/model"; 419 id = id.replace(' ', '_'); 420 id = id.replace('/', '_'); 421 HashSet filters = getWantedBuilders(target,id); 422 Apps1DataWriter.writeDataXML(filters,datafile,target); 423 return true; 424 } 425 426 } 427 428 | Popular Tags |