1 10 11 package org.mmbase.applications.packaging.projects.creators; 12 13 import java.io.File ; 14 import java.io.FileOutputStream ; 15 import java.util.ArrayList ; 16 import java.util.Date ; 17 import java.util.Iterator ; 18 import java.util.jar.JarEntry ; 19 import java.util.jar.JarFile ; 20 import java.util.jar.JarOutputStream ; 21 import java.util.jar.Manifest ; 22 23 import org.mmbase.applications.packaging.PackageManager; 24 import org.mmbase.applications.packaging.ProviderManager; 25 import org.mmbase.applications.packaging.packagehandlers.PackageInterface; 26 import org.mmbase.applications.packaging.projects.IncludedPackage; 27 import org.mmbase.applications.packaging.projects.Target; 28 import org.mmbase.applications.packaging.projects.packageStep; 29 import org.mmbase.applications.packaging.util.ExtendedDocumentReader; 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 BundleBasicCreator extends BasicCreator implements CreatorInterface { 41 42 private static Logger log = Logging.getLoggerInstance(BundleBasicCreator.class); 43 44 public static final String DTD_PACKAGING_BUNDLE_BASIC_1_0 = "packaging_bundle_basic_1_0.dtd"; 45 public static final String PUBLIC_ID_PACKAGING_BUNDLE_BASIC_1_0 = "-//MMBase//DTD packaging_bundle_basic config 1.0//EN"; 46 47 public static void registerPublicIDs() { 48 XMLEntityResolver.registerPublicID(PUBLIC_ID_PACKAGING_BUNDLE_BASIC_1_0, "DTD_PACKAGING_BUNDLE_BASIC_1_0", BundleBasicCreator.class); } 49 50 public BundleBasicCreator() { 51 cl=BundleBasicCreator.class; 52 prefix="packaging_bundle_basic"; 53 } 54 55 56 public boolean createPackage(Target target,int newversion) { 57 58 clearPackageSteps(); 59 setProgressBar(1000); 61 62 packageStep step=getNextPackageStep(); 64 step.setUserFeedBack("bundle/basic packager started"); 65 66 increaseProgressBar(50); 68 69 setSubProgressBar(relatedtargetcreate.size()); 71 for (Iterator i = relatedtargetcreate.iterator(); i.hasNext();) { 72 Target rt = (Target)i.next(); 73 int nv=rt.getNextVersion(); 76 PackageInterface p = PackageManager.getPackage(rt.getId()); 77 if (p != null) { 78 try { 79 int t=Integer.parseInt(p.getVersion()); 80 if (t >= nv) nv = t+1; 81 } catch(Exception e) {} 82 } 83 84 step=getNextPackageStep(); 85 step.setUserFeedBack("related create : "+rt.getId()+" version "+nv+".."); 86 rt.createPackage(nv); 87 ProviderManager.discoverPackages(); 88 target.setIncludedVersion(rt.getId(),""+nv); 89 ProviderManager.resetSleepCounter(); 90 step.setUserFeedBack("related create : "+rt.getId()+" version "+nv+"...done"); 91 increaseSubProgressBar(1); 92 } 93 increaseProgressBar(200); 95 96 relatedtargetcreate = new ArrayList (); 97 98 99 String newfilename=getBuildPath()+getName(target).replace(' ','_')+"@"+getMaintainer(target)+"_bundle_basic_"+newversion; 100 101 try { 102 JarOutputStream jarfile = new JarOutputStream (new FileOutputStream (newfilename+".tmb"),new Manifest ()); 103 104 step=getNextPackageStep(); 105 step.setUserFeedBack("creating bundle.xml file..."); 106 createBundleMetaFile(jarfile,target,newversion); 107 step.setUserFeedBack("creating bundle.xml file...done"); 108 109 addScreenshotFiles(jarfile,target); 111 112 increaseProgressBar(100); 114 115 ArrayList packages=(ArrayList )target.getItem("includedpackages"); 117 118 setSubProgressBar(packages.size()); 119 for (Iterator i = packages.iterator(); i.hasNext();) { 120 IncludedPackage ip=(IncludedPackage)i.next(); 121 if (ip.getIncluded()) { 122 PackageInterface p=PackageManager.getPackage(ip.getId(),ip.getVersion()); 125 int d=0; 126 while (p == null && d<10) { 127 try { 128 Thread.sleep(1000); 129 } catch(Exception e) {} 130 p=PackageManager.getPackage(ip.getId(),ip.getVersion()); 131 d = d +1; 132 } 133 JarFile jf=p.getJarFile(); 134 if (jf!=null) { 135 String includename=ip.getId()+"_"+ip.getVersion()+".mmp"; 136 String buildname=jf.getName(); 137 addFile(jarfile,buildname,includename,"packagefile",""); 138 } 139 } 140 141 } 142 increaseSubProgressBar(1); 143 increaseProgressBar(200); 145 146 jarfile.close(); 147 } catch(Exception e) { 148 e.printStackTrace(); 149 } 150 151 152 if (getErrorCount()==0) { 154 File f1 = new File (newfilename+".tmb"); 155 File f2 = new File (newfilename+".mmb"); 156 if (f2.exists()) { 157 f2.delete(); 158 } 159 f2 = new File (newfilename+".mmb"); 160 if (f1.renameTo(f2)) { 161 updatePackageTime(target,new Date (),newversion); 162 target.save(); 163 } else { 164 log.error("rename failed from : "+newfilename+".tmp to : "+newfilename + ".mmb"); 165 return false; 166 } 167 step=getNextPackageStep(); 168 step.setUserFeedBack("Saving new version : "+newversion); 169 } 170 increaseProgressBar(200); 172 173 if (target.getPublishState()) { 175 ProviderManager.discoverPackages(); 176 step=getNextPackageStep(); 177 step.setUserFeedBack("publishing to provider : "+target.getPublishProvider()); 178 step=getNextPackageStep(); 179 step.setUserFeedBack("sending file (version "+newversion+") : "+target.getId()+" ..."); 180 if (target.publish(newversion,step)) { 181 step.setUserFeedBack("sending file (version "+newversion+") : "+target.getId()+" ... done"); 182 } else { 183 step.setUserFeedBack("sending file (version "+newversion+") : "+target.getId()+" ... failed"); 184 } 185 } 186 increaseProgressBar(200); 188 189 step=getNextPackageStep(); 190 step.setUserFeedBack("bundle/basic packager ended : "+getErrorCount()+" errors and "+getWarningCount()+" warnings"); 191 increaseProgressBar(50); 193 return true; 194 } 195 196 197 public void createBundleMetaFile(JarOutputStream jarfile,Target target,int newversion) { 198 Date d=new Date (); 199 String body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 200 body+="<!DOCTYPE bundle PUBLIC \"-//MMBase/DTD bundle config 1.0//EN\" \"http://www.mmbase.org/dtd/bundle_1_0.dtd\">\n"; 201 body+="<bundle name=\""+getName(target)+"\" type=\""+getType()+"\" maintainer=\""+getMaintainer(target)+"\" version=\""+newversion+"\" creation-date=\""+d.toString()+"\" >\n"; 202 body+="\t<description>"+getDescription(target)+"</description>\n"; 203 body+="\t<license type=\""+getLicenseType(target)+"\" version=\""+getLicenseVersion(target)+"\" name=\""+getLicenseName(target)+"\" />\n"; 204 body+="\t<releasenotes>\n"+getReleaseNotes(target)+"\n</releasenotes>\n"; 205 body+="\t<installationnotes>\n"+getInstallationNotes(target)+"\n</installationnotes>\n"; 206 body+="\t<installreset>"+getInstallReset(target)+"</installreset>\n"; 207 body+=getScreenshotsXML(target); 208 body+=getStarturlsXML(target); 209 body+=getRelatedPeopleXML("initiators","initiator",target); 210 body+=getRelatedPeopleXML("supporters","supporter",target); 211 body+=getRelatedPeopleXML("developers","developer",target); 212 body+=getRelatedPeopleXML("contacts","contact",target); 213 214 body+=getNeededPackagesXML(target); 215 216 body+="</bundle>\n"; 217 try { 218 JarEntry entry = new JarEntry ("bundle.xml"); 219 jarfile.putNextEntry(entry); 220 jarfile.write(body.getBytes("UTF-8")); 221 } catch (Exception e) { 222 e.printStackTrace(); 223 } 224 } 225 226 227 public String getNeededPackagesXML(Target target) { 228 ArrayList packages=(ArrayList )target.getItem("includedpackages"); 229 String body="\t<neededpackages>\n"; 230 if (packages!=null) { 231 for (Iterator i = packages.iterator(); i.hasNext();) { 232 IncludedPackage ip=(IncludedPackage)i.next(); 233 body+="\t\t<package name=\""+ip.getName()+"\" type=\""+ip.getType()+"\" maintainer=\""+ip.getMaintainer()+"\" version=\""+ip.getVersion()+"\" included=\""+ip.getIncluded()+"\" />\n"; 234 } 235 } 236 body+="\t</neededpackages>\n"; 237 return body; 238 } 239 240 public ArrayList getIncludedPackages(Target target) { 241 Object o=target.getItem("includedpackages"); 242 if (o!=null) { 243 return (ArrayList )o; 244 } 245 return null; 246 } 247 248 public boolean decodeItems(Target target) { 249 super.decodeItems(target); 250 ArrayList includedpackages=new ArrayList (); 252 ExtendedDocumentReader reader=target.getReader(); 253 org.w3c.dom.Node n=reader.getElementByPath(prefix+".neededpackages"); 254 org.w3c.dom.Node n2=n.getFirstChild(); 255 while (n2!=null) { 256 if (n2.getNodeName().equals("package")) { 257 NamedNodeMap nm=n2.getAttributes(); 258 String name=null; 259 String type=null; 260 String maintainer=null; 261 String version=null; 262 String included=null; 263 if (nm!=null) { 264 org.w3c.dom.Node n3=nm.getNamedItem("name"); 265 name=n3.getNodeValue(); 266 n3=nm.getNamedItem("type"); 267 type=n3.getNodeValue(); 268 n3=nm.getNamedItem("maintainer"); 269 maintainer=n3.getNodeValue(); 270 n3=nm.getNamedItem("version"); 271 version=n3.getNodeValue(); 272 n3=nm.getNamedItem("included"); 273 included=n3.getNodeValue(); 274 IncludedPackage ip=new IncludedPackage(); 275 ip.setName(name); 276 ip.setMaintainer(maintainer); 277 ip.setVersion(version); 278 ip.setType(type); 279 if (included.equals("true")) { 280 ip.setIncluded(true); 281 } else { 282 ip.setIncluded(false); 283 } 284 includedpackages.add(ip); 285 } 286 } 287 n2=n2.getNextSibling(); 288 } 289 target.setItem("includedpackages",includedpackages); 290 return false; 291 } 292 293 public boolean setIncludedVersion(Target target,String id,String newversion) { 294 ArrayList packages=(ArrayList )target.getItem("includedpackages"); 295 for (Iterator i = packages.iterator(); i.hasNext();) { 296 IncludedPackage ip=(IncludedPackage)i.next(); 297 if (ip.getId().equals(id)) { 298 ip.setVersion(newversion); 299 } 300 } 301 target.save(); 302 return true; 303 } 304 305 306 public boolean delIncludedPackage(Target target,String id) { 307 ArrayList packages=(ArrayList )target.getItem("includedpackages"); 308 for (Iterator i = packages.iterator(); i.hasNext();) { 309 IncludedPackage ip=(IncludedPackage)i.next(); 310 if (ip.getId().equals(id)) { 311 packages.remove(ip); 312 break; 313 } 314 } 315 target.save(); 316 return true; 317 } 318 319 public String getXMLFile(Target target) { 320 String body=getDefaultXMLHeader(target); 321 body+=getDefaultXMLMetaInfo(target); 322 body+=getScreenshotsXML(target); 323 body+=getStarturlsXML(target); 324 body+=getRelatedPeopleXML("initiators","initiator",target); 325 body+=getRelatedPeopleXML("supporters","supporter",target); 326 body+=getRelatedPeopleXML("developers","developer",target); 327 body+=getRelatedPeopleXML("contacts","contact",target); 328 body+=getNeededPackagesXML(target); 329 if (target.getPublishProvider()!=null) { 330 if (target.getPublishState()) { 331 body+="\t<publishprovider name=\""+target.getPublishProvider()+"\" state=\"active\" sharepassword=\""+target.getPublishSharePassword()+"\" />\n"; 332 } else { 333 body+="\t<publishprovider name=\""+target.getPublishProvider()+"\" state=\"inactive\" sharepassword=\""+target.getPublishSharePassword()+"\" />\n"; 334 } 335 } 336 body+=getDefaultXMLFooter(target); 337 return body; 338 } 339 340 public boolean addPackage(Target target,String newpackage) { 341 ArrayList packages=(ArrayList )target.getItem("includedpackages"); 342 PackageInterface p=PackageManager.getPackage(newpackage); 343 if (p!=null) { 344 IncludedPackage ip=new IncludedPackage(); 345 ip.setName(p.getName()); 346 ip.setMaintainer(p.getMaintainer()); 347 ip.setVersion(p.getVersion()); 348 ip.setType(p.getType()); 349 ip.setIncluded(true); 350 if (packages==null) { 351 packages=new ArrayList (); 352 target.setItem("includedpackages",packages); 353 } 354 packages.add(ip); 355 target.save(); 356 return true; 357 } 358 return false; 359 } 360 361 362 } 363 | Popular Tags |