1 10 11 package org.mmbase.applications.packaging.projects.creators; 12 13 import java.io.File ; 14 import java.io.FileInputStream ; 15 import java.util.ArrayList ; 16 import java.util.Date ; 17 import java.util.Iterator ; 18 import java.util.List ; 19 import java.util.StringTokenizer ; 20 import java.util.jar.JarEntry ; 21 import java.util.jar.JarOutputStream ; 22 23 import org.mmbase.applications.packaging.PackageManager; 24 import org.mmbase.applications.packaging.Person; 25 import org.mmbase.applications.packaging.packagehandlers.PackageInterface; 26 import org.mmbase.applications.packaging.projects.PackageDepend; 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.logging.Logger; 31 import org.mmbase.util.logging.Logging; 32 import org.w3c.dom.NamedNodeMap ; 33 34 39 public class BasicCreator implements CreatorInterface,Runnable { 40 private static Logger log = Logging.getLoggerInstance(BasicCreator.class); 41 Class cl; 42 String prefix; 43 44 private Target threadtarget; 45 private int threadversion; 46 private String state = "done"; 47 48 private String type="unknown/unknown"; 49 private String description=""; 50 51 52 private ArrayList packagesteps; 53 private packageStep projectstep; 54 ArrayList relatedtargetcreate = new ArrayList (); 55 private float progressbar = 0; 56 private float progressstep = 1; 57 private float subprogressbar = 0; 58 private float subprogressstep = 1; 59 60 61 public BasicCreator() { 62 } 63 64 public String getDescription() { 65 return description; 66 } 67 68 public String getType() { 69 if (type==null) return ""; 70 return type; 71 } 72 73 public void setType(String type) { 74 this.type=type; 75 } 76 77 public boolean setDescription(Target target,String newdescription) { 78 target.setItem("description",newdescription); 79 target.save(); 80 return true; 81 } 82 83 84 public boolean setName(Target target,String newname) { 85 target.setItem("name",newname); 86 target.save(); 87 return true; 88 } 89 90 91 public boolean setMaintainer(Target target,String newmaintainer) { 92 target.setItem("maintainer",newmaintainer); 93 target.save(); 94 return true; 95 } 96 97 public boolean setLicenseVersion(Target target,String newlicenseversion) { 98 target.setItem("license.version",newlicenseversion); 99 target.save(); 100 return true; 101 } 102 103 public boolean setLicenseType(Target target,String newlicensetype) { 104 target.setItem("license.type",newlicensetype); 105 target.save(); 106 return true; 107 } 108 109 public boolean setLicenseName(Target target,String newlicensename) { 110 target.setItem("license.name",newlicensename); 111 target.save(); 112 return true; 113 } 114 115 public int getLastVersion(Target target) { 116 return getItemIntValue(target,"lastversion"); 117 } 118 119 public int getNextVersion(Target target) { 120 int i=getLastVersion(target); 121 if (i==-1) return 1; 122 return i+1; 123 } 124 125 public String getLastDate(Target target) { 126 return getItemStringValue(target,"lastdate"); 127 } 128 129 public boolean createPackage(Target target,int newversion) { 130 log.error("createPackage not implemented by creator : "+this); 131 return false; 132 } 133 134 135 public void createPackageThreaded(Target target,int newversion) { 136 threadtarget = target; 137 threadversion = newversion; 138 state="creating"; 139 Thread kicker = new Thread (this, "packagethread"); 140 kicker.start(); 141 } 142 143 public void run() { 144 createPackage(threadtarget,threadversion); 145 state="done"; 146 } 147 148 public boolean addPackageDepends(Target target,String newpackage,String version) { 149 ArrayList packagedepends=(ArrayList )target.getItem("packagedepends"); 150 PackageInterface p=PackageManager.getPackage(newpackage); 151 if (p!=null) { 152 PackageDepend pd=new PackageDepend(); 153 pd.setName(p.getName()); 154 pd.setMaintainer(p.getMaintainer()); 155 pd.setVersion(p.getVersion()); 156 pd.setType(p.getType()); 157 packagedepends.add(pd); 158 target.save(); 159 return true; 160 } 161 return false; 162 } 163 164 public boolean delPackageDepends(Target target,String packageid,String version,String versionmode) { 165 ArrayList packagedepends=(ArrayList )target.getItem("packagedepends"); 166 for (Iterator i = packagedepends.iterator(); i.hasNext();) { 167 PackageDepend pd=(PackageDepend)i.next(); 168 if (pd.getId().equals(packageid) && pd.getVersion().equals(version) && pd.getVersionMode().equals(versionmode)) { 169 packagedepends.remove(pd); 170 break; 171 } 172 } 173 target.save(); 174 return true; 175 } 176 177 178 public boolean setPackageDepends(Target target,String packageid,String oldversion,String oldversionmode,String newversion,String newversionmode) { 179 ArrayList packagedepends=(ArrayList )target.getItem("packagedepends"); 180 for (Iterator i = packagedepends.iterator(); i.hasNext();) { 181 PackageDepend pd=(PackageDepend)i.next(); 182 if (pd.getId().equals(packageid) && pd.getVersion().equals(oldversion) && pd.getVersionMode().equals(oldversionmode)) { 183 pd.setVersion(newversion); 184 pd.setVersionMode(newversionmode); 185 break; 186 } 187 } 188 target.save(); 189 return true; 190 } 191 192 public ArrayList getPackageDepends(Target target) { 193 Object o=target.getItem("packagedepends"); 194 if (o!=null) return (ArrayList )o; 195 return new ArrayList (); 196 } 197 198 public boolean addPackageInitiator(Target target,String newname,String newcompany) { 199 ArrayList list=getRelatedPeople("initiators",target); 200 if (list==null) { 201 list=new ArrayList (); 202 target.setItem("initiators",list); 203 } 204 Person pr=new Person(); 205 pr.setName(newname); 206 pr.setCompany(newcompany); 207 list.add(pr); 208 target.save(); 209 return true; 210 } 211 212 public boolean setPackageInitiator(Target target,String oldname,String newname,String oldcompany,String newcompany) { 213 ArrayList people=getRelatedPeople("initiators",target); 214 for (Iterator i = people.iterator(); i.hasNext();) { 215 Person pr=(Person)i.next(); 216 if (pr.getName().equals(oldname) && pr.getCompany().equals(oldcompany)) { 217 pr.setName(newname); 218 pr.setCompany(newcompany); 219 target.save(); 220 break; 221 } 222 } 223 return true; 224 } 225 226 227 public boolean delPackageInitiator(Target target,String oldname,String oldcompany) { 228 ArrayList people=getRelatedPeople("initiators",target); 229 for (Iterator i = people.iterator(); i.hasNext();) { 230 Person pr=(Person)i.next(); 231 if (pr.getName().equals(oldname) && pr.getCompany().equals(oldcompany)) { 232 people.remove(pr); 233 target.save(); 234 break; 235 } 236 } 237 return true; 238 } 239 240 241 public boolean addPackageDeveloper(Target target,String newname,String newcompany) { 242 ArrayList list=getRelatedPeople("developers",target); 243 if (list==null) { 244 list=new ArrayList (); 245 target.setItem("developers",list); 246 } 247 Person pr=new Person(); 248 pr.setName(newname); 249 pr.setCompany(newcompany); 250 list.add(pr); 251 target.save(); 252 return true; 253 } 254 255 public boolean setPackageDeveloper(Target target,String oldname,String newname,String oldcompany,String newcompany) { 256 ArrayList people=getRelatedPeople("developers",target); 257 for (Iterator i = people.iterator(); i.hasNext();) { 258 Person pr=(Person)i.next(); 259 if (pr.getName().equals(oldname) && pr.getCompany().equals(oldcompany)) { 260 pr.setName(newname); 261 pr.setCompany(newcompany); 262 target.save(); 263 break; 264 } 265 } 266 return true; 267 } 268 269 270 public boolean delPackageDeveloper(Target target,String oldname,String oldcompany) { 271 ArrayList people=getRelatedPeople("developers",target); 272 for (Iterator i = people.iterator(); i.hasNext();) { 273 Person pr=(Person)i.next(); 274 if (pr.getName().equals(oldname) && pr.getCompany().equals(oldcompany)) { 275 people.remove(pr); 276 target.save(); 277 break; 278 } 279 } 280 return true; 281 } 282 283 284 public boolean addPackageContact(Target target,String newreason,String newname,String newemail) { 285 ArrayList list=getRelatedPeople("contacts",target); 286 if (list==null) { 287 list=new ArrayList (); 288 target.setItem("contacts",list); 289 } 290 Person pr=new Person(); 291 pr.setName(newname); 292 pr.setMailto(newemail); 293 pr.setReason(newreason); 294 list.add(pr); 295 target.save(); 296 return true; 297 } 298 299 public boolean setPackageContact(Target target,String oldreason,String newreason,String oldname,String newname,String oldemail,String newemail) { 300 ArrayList people=getRelatedPeople("contacts",target); 301 for (Iterator i = people.iterator(); i.hasNext();) { 302 Person pr=(Person)i.next(); 303 if (pr.getName().equals(oldname) && pr.getReason().equals(oldreason) && pr.getMailto().equals(oldemail)) { 304 pr.setName(newname); 305 pr.setMailto(newemail); 306 pr.setReason(newreason); 307 target.save(); 308 break; 309 } 310 } 311 return true; 312 } 313 314 315 public boolean delPackageContact(Target target,String oldreason,String oldname,String oldemail) { 316 ArrayList people=getRelatedPeople("contacts",target); 317 for (Iterator i = people.iterator(); i.hasNext();) { 318 Person pr=(Person)i.next(); 319 if (pr.getName().equals(oldname) && pr.getMailto().equals(oldemail) && pr.getReason().equals(oldreason)) { 320 people.remove(pr); 321 target.save(); 322 break; 323 } 324 } 325 return true; 326 } 327 328 329 public boolean addPackageSupporter(Target target,String newcompany) { 330 ArrayList list=getRelatedPeople("supporters",target); 331 if (list==null) { 332 list=new ArrayList (); 333 target.setItem("supporters",list); 334 } 335 Person pr=new Person(); 336 pr.setCompany(newcompany); 337 list.add(pr); 338 target.save(); 339 return true; 340 } 341 342 public boolean setPackageSupporter(Target target,String oldcompany,String newcompany) { 343 ArrayList people=getRelatedPeople("supporters",target); 344 for (Iterator i = people.iterator(); i.hasNext();) { 345 Person pr=(Person)i.next(); 346 if (pr.getCompany().equals(oldcompany)) { 347 pr.setCompany(newcompany); 348 target.save(); 349 break; 350 } 351 } 352 return true; 353 } 354 355 356 public boolean delPackageSupporter(Target target,String oldcompany) { 357 ArrayList people=getRelatedPeople("supporters",target); 358 for (Iterator i = people.iterator(); i.hasNext();) { 359 Person pr=(Person)i.next(); 360 if (pr.getCompany().equals(oldcompany)) { 361 people.remove(pr); 362 target.save(); 363 break; 364 } 365 } 366 return true; 367 } 368 369 370 public boolean decodeIntItem(Target target,String epath) { 371 ExtendedDocumentReader reader=target.getReader(); 372 String value=reader.getElementValue(prefix+"."+epath); 373 try { 374 target.setItem(epath,new Integer (Integer.parseInt(value))); 375 } catch(Exception e) { 376 return false; 377 } 378 return true; 379 } 380 381 382 public boolean decodeStringItem(Target target,String epath) { 383 ExtendedDocumentReader reader=target.getReader(); 384 String value=reader.getElementValue(prefix+"."+epath); 385 if (value!=null) { 386 target.setItem(epath,value); 387 } else { 388 target.setItem(epath,""); 389 } 390 return true; 391 } 392 393 394 public boolean decodeStringAttributeItem(Target target,String epath,String attribute) { 395 ExtendedDocumentReader reader=target.getReader(); 396 org.w3c.dom.Node n=reader.getElementByPath(prefix+"."+epath); 397 NamedNodeMap nm=n.getAttributes(); 398 if (nm!=null) { 399 String value=null; 400 org.w3c.dom.Node n2=nm.getNamedItem(attribute); 401 if (n2!=null) { 402 value=n2.getNodeValue(); 403 target.setItem(epath+"."+attribute,value); 404 } 405 return true; 406 } 407 return false; 408 } 409 410 411 public Iterator getPackageSteps() { 412 if (packagesteps!=null) { 413 return packagesteps.iterator(); 414 } else { 415 return null; 416 } 417 } 418 419 public int getErrorCount() { 420 int count=0; 421 Iterator e=getPackageSteps(); 422 while (e.hasNext()) { 423 packageStep step=(packageStep)e.next(); 424 count+=step.getErrorCount(); 425 } 426 return count; 427 } 428 429 430 public int getWarningCount() { 431 int count=0; 432 Iterator e=getPackageSteps(); 433 while (e.hasNext()) { 434 packageStep step=(packageStep)e.next(); 435 count+=step.getWarningCount(); 436 } 437 return count; 438 } 439 440 public Iterator getPackageSteps(int logid) { 441 Iterator e=getPackageSteps(); 443 while (e.hasNext()) { 444 packageStep step=(packageStep)e.next(); 445 Object o=step.getPackageSteps(logid); 446 if (o!=null) { 447 return (Iterator )o; 448 } 449 } 450 return null; 451 } 452 453 public packageStep getNextPackageStep() { 454 packageStep step=null; 455 if (projectstep!=null) { 456 step=projectstep.getNextPackageStep(); 457 } else { 458 step=new packageStep(); 460 } 461 if (packagesteps==null) { 462 packagesteps=new ArrayList (); 463 packagesteps.add(step); 464 return step; 465 } else { 466 packagesteps.add(step); 467 return step; 468 } 469 } 470 471 public void clearPackageSteps() { 472 packagesteps=null; 473 } 474 475 476 public ArrayList getFileNames(ArrayList foundfiles,String basedir,String include,String exclude) { 477 ArrayList files=getFileNames_r(foundfiles,basedir,include,exclude); 479 ArrayList filtered=new ArrayList (); 480 481 Iterator e=files.iterator(); 483 while (e.hasNext()) { 484 String fn=(String )e.next(); 485 if (fn.endsWith(File.separator)) { 486 Iterator f=files.iterator(); 487 while (f.hasNext()) { 488 String fn2=(String )f.next(); 489 if (!fn2.endsWith(File.separator) && fn2.indexOf(fn)!=-1) { 490 filtered.add(fn); 491 break; 492 } 493 } 494 } else { 495 filtered.add(fn); 496 } 497 } 498 return filtered; 499 } 500 501 public ArrayList getFileNames_r(ArrayList foundfiles,String basedir,String include,String exclude) { 502 File currDir = new File (basedir); 503 if (currDir!=null && currDir.isDirectory()) { 504 String files[] = currDir.list(); 505 for (int i=0; i<files.length; i++) { 506 File tfile=new File (basedir+File.separator+files[i]); 507 if (tfile.isDirectory()) { 508 foundfiles.add(basedir+files[i]+"/"); 509 getFileNames_r(foundfiles,basedir+files[i]+File.separator,include,exclude); 510 } else { 511 512 String fn=basedir+files[i]; 513 if (include.equals("*") || fn.indexOf(include)!=-1) { 514 if (exclude.equals("") || !excludeFile(tfile,fn,exclude)) { 515 foundfiles.add(fn); 516 } 517 } 518 } 519 } 520 } 521 return foundfiles; 522 } 523 524 private boolean excludeFile(File tfile,String fullname,String excludestring) { 525 excludestring = excludestring.replace('/',File.separatorChar); 526 excludestring = excludestring.replace('\\',File.separatorChar); 527 528 long length=tfile.length(); 529 long lastmodified=tfile.lastModified(); 530 long fileage=(System.currentTimeMillis()-lastmodified)/1000; 531 StringTokenizer tok = new StringTokenizer (excludestring,",\n\r"); 532 while (tok.hasMoreTokens()) { 533 String ex=tok.nextToken(); 534 if (ex.startsWith("t(")) { 535 } else if (ex.startsWith("s(")) { 536 try { 537 String tmp=ex.substring(2); 538 int maxfsize=Integer.parseInt(tmp.substring(0,tmp.indexOf(")"))); 539 if (length>maxfsize) return true; 540 } catch(Exception e) { 541 } 542 } else if (ex.startsWith("a(")) { 543 try { 544 String tmp=ex.substring(2); 545 int age=3600*Integer.parseInt(tmp.substring(0,tmp.indexOf(")"))); 546 if (fileage>age) return true; 547 } catch(Exception e) { 548 } 549 } else if (fullname.indexOf(ex)!=-1) { 550 return true; 551 } 552 } 553 return false; 554 } 555 556 public String getXMLFile(Target target) { 557 log.error("getXMLFile not implemented in creator : "+this); 558 return null; 559 } 560 561 public void createPackageMetaFile(JarOutputStream jarfile,Target target,int newversion) { 562 Date d=new Date (); 563 String body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 564 body+="<!DOCTYPE package PUBLIC \"-//MMBase/DTD package config 1.0//EN\" \"http://www.mmbase.org/dtd/package_1_0.dtd\">\n"; 565 body+="<package name=\""+getName(target)+"\" type=\""+type+"\" maintainer=\""+getMaintainer(target)+"\" version=\""+newversion+"\" creation-date=\""+d.toString()+"\" >\n"; 566 body+="\t<description>"+getDescription(target)+"</description>\n"; 567 body+="\t<license type=\""+getLicenseType(target)+"\" version=\""+getLicenseVersion(target)+"\" name=\""+getLicenseName(target)+"\" />\n"; 568 body+="\t<releasenotes>\n"+getReleaseNotes(target)+"\n</releasenotes>\n"; 569 body+="\t<installationnotes>\n"+getInstallationNotes(target)+"\n</installationnotes>\n"; 570 571 572 body+=getRelatedPeopleXML("initiators","initiator",target); 573 body+=getRelatedPeopleXML("supporters","supporter",target); 574 body+=getRelatedPeopleXML("developers","developer",target); 575 body+=getRelatedPeopleXML("contacts","contact",target); 576 body+="</package>\n"; 577 try { 578 JarEntry entry = new JarEntry ("package.xml"); 579 jarfile.putNextEntry(entry); 580 jarfile.write(body.getBytes("UTF-8")); 581 } catch (Exception e) { 582 e.printStackTrace(); 583 } 584 } 585 586 587 public String getPackageDependsXML(Target target) { 588 String body="\t<packagedepends>\n"; 589 ArrayList packagedepends=getPackageDepends(target); 590 if (packagedepends!=null) { 591 for (Iterator i = packagedepends.iterator(); i.hasNext();) { 592 PackageDepend pd=(PackageDepend)i.next(); 593 body+="\t\t<package"; 594 body+=" name=\""+pd.getName()+"\""; 595 body+=" maintainer=\""+pd.getMaintainer()+"\""; 596 body+=" type=\""+pd.getType()+"\""; 597 body+=" version=\""+pd.getVersion()+"\""; 598 body+=" versionmode=\""+pd.getVersionMode()+"\""; 599 body+=" />\n"; 600 } 601 } 602 body+="\t</packagedepends>\n"; 603 return body; 604 } 605 606 607 public void createDependsMetaFile(JarOutputStream jarfile,Target target) { 608 String body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 609 body+="<!DOCTYPE packagedepends PUBLIC \"-//MMBase/DTD packagedepends config 1.0//EN\" \"http://www.mmbase.org/dtd/packagedepends_1_0.dtd\">\n"; 610 body+="\t<packagedepends>\n"; 611 612 ArrayList packagedepends=getPackageDepends(target); 613 if (packagedepends!=null) { 614 for (Iterator i = packagedepends.iterator(); i.hasNext();) { 615 PackageDepend pd=(PackageDepend)i.next(); 616 body+="\t\t<package"; 617 body+=" name=\""+pd.getName()+"\""; 618 body+=" maintainer=\""+pd.getMaintainer()+"\""; 619 body+=" type=\""+pd.getType()+"\""; 620 body+=" version=\""+pd.getVersion()+"\""; 621 body+=" versionmode=\""+pd.getVersionMode()+"\""; 622 body+=" />\n"; 623 } 624 } 625 body+="\t</packagedepends>\n"; 626 try { 627 JarEntry entry = new JarEntry ("depends.xml"); 628 jarfile.putNextEntry(entry); 629 jarfile.write(body.getBytes("UTF-8")); 630 } catch (Exception e) { 631 e.printStackTrace(); 632 } 633 } 634 635 public int addFiles(JarOutputStream jarfile,String basedir,String include,String exclude,String guiname,String dirprefix) { 636 packageStep step=getNextPackageStep(); 637 step.setUserFeedBack("adding "+guiname+" files..."); 638 639 if (!dirprefix.equals("") && !dirprefix.endsWith(File.separator)) dirprefix+=File.separator; 640 641 int filesadded=0; 642 643 byte[] buffer = new byte[1024]; 644 int bytesRead; 645 int baselen=basedir.length(); 646 try { 647 Iterator files=getFileNames(new ArrayList (),basedir,include,exclude).iterator(); 648 while (files.hasNext()) { 649 String fn=(String )files.next(); 650 if (!fn.endsWith("/")) { 651 FileInputStream file = new FileInputStream (fn); 652 packageStep substep=step.getNextPackageStep(); 653 substep.setUserFeedBack("adding "+guiname+" file : "+fn); 654 try { 655 JarEntry entry = new JarEntry (dirprefix+fn.substring(baselen)); 656 jarfile.putNextEntry(entry); 657 while ((bytesRead = file.read(buffer)) != -1) { 658 jarfile.write(buffer, 0, bytesRead); 659 } 660 substep.setUserFeedBack("added "+guiname+" file : "+fn.substring(baselen)); 661 filesadded++; 662 } catch (Exception e) { 663 substep.setUserFeedBack("failed added "+guiname+" file : "+fn.substring(baselen)); 664 } finally { 665 file.close(); 666 } 667 } else { 668 JarEntry entry = new JarEntry (dirprefix+fn.substring(baselen)); 669 jarfile.putNextEntry(entry); 670 } 671 } 672 } catch (Exception e) { 673 e.printStackTrace(); 674 } 675 step.setUserFeedBack("added "+filesadded+" "+guiname+" files... done"); 676 return filesadded; 677 } 678 679 public String getDescription(Target target) { 680 return(getItemStringValue(target,"description")); 681 } 682 683 public String getReleaseNotes(Target target) { 684 return(getItemStringValue(target,"releasenotes")); 685 } 686 687 public String getInstallReset(Target target) { 688 String tmp=getItemStringValue(target,"installreset"); 689 if (tmp!=null && !tmp.equals("")) { 690 return tmp; 691 } 692 return "false"; 693 } 694 695 public String getInstallationNotes(Target target) { 696 return(getItemStringValue(target,"installationnotes")); 697 } 698 699 public String getMaintainer(Target target) { 700 return(getItemStringValue(target,"maintainer")); 701 } 702 703 public String getName(Target target) { 704 return(getItemStringValue(target,"name")); 705 } 706 707 public String getLicenseType(Target target) { 708 return(getItemStringValue(target,"license.type")); 709 } 710 711 public String getLicenseName(Target target) { 712 return(getItemStringValue(target,"license.name")); 713 } 714 715 public String getLicenseVersion(Target target) { 716 return(getItemStringValue(target,"license.version")); 717 } 718 719 public ArrayList getRelatedPeople(String type,Target target) { 720 Object o=target.getItem(type); 721 if (o!=null) return (ArrayList )o; 722 return null; 723 } 724 725 726 public void addFile(JarOutputStream jarfile,String fn,String dfn,String guiname,String dirprefix) { 727 728 packageStep step=getNextPackageStep(); 729 if (!dirprefix.equals("")) dfn=dirprefix+File.separator+dfn; 730 step.setUserFeedBack("added "+guiname+" file : "+dfn+" ... done"); 731 byte[] buffer = new byte[1024]; 732 int bytesRead; 733 try { 734 if (!fn.endsWith("/")) { 735 FileInputStream file = new FileInputStream (fn); 736 try { 737 JarEntry entry = new JarEntry (dfn); 738 jarfile.putNextEntry(entry); 739 while ((bytesRead = file.read(buffer)) != -1) { 740 jarfile.write(buffer, 0, bytesRead); 741 } 742 } catch (Exception e) { 743 } finally { 744 file.close(); 745 } 746 } else { 747 JarEntry entry = new JarEntry (dfn); 748 jarfile.putNextEntry(entry); 749 } 750 } catch (Exception e) { 751 step.setUserFeedBack("added "+guiname+" file : "+dfn+" ... error file not found"); 752 step.setType(packageStep.TYPE_ERROR); 753 return; 754 } 755 step.setUserFeedBack("added "+guiname+" file : "+dfn+" ... done"); 756 } 757 758 759 public void addScreenshotFiles(JarOutputStream jarfile,Target target) { 760 try { 761 JarEntry entry = new JarEntry ("screenshots" + File.separator); 762 jarfile.putNextEntry(entry); 763 } 764 catch (Exception e) { 765 e.printStackTrace(); 766 return; 767 } 768 769 for (Iterator i = target.getScreenshots().iterator(); i.hasNext();) { 770 String name = (String ) i.next(); 771 String filen = (String ) i.next(); String description = (String ) i.next(); String fn = target.getBaseDir() + "packaging" + File.separator + filen; 774 775 String dfn = filen; 776 packageStep step = getNextPackageStep(); 777 step.setUserFeedBack("added screenshot file : " + dfn + " ... done"); 778 byte[] buffer = new byte[1024]; 779 int bytesRead; 780 try { 781 FileInputStream file = new FileInputStream (fn); 782 try { 783 JarEntry entry = new JarEntry (dfn); 784 jarfile.putNextEntry(entry); 785 while ((bytesRead = file.read(buffer)) != -1) { 786 jarfile.write(buffer, 0, bytesRead); 787 } 788 } 789 catch (Exception e) { 790 } 791 finally { 792 file.close(); 793 } 794 } 795 catch (Exception e) { 796 e.printStackTrace(); 797 step 798 .setUserFeedBack("added screenshot file : " + dfn 799 + " ... error file not found"); 800 step.setType(packageStep.TYPE_ERROR); 801 return; 802 } 803 step.setUserFeedBack("added screenshot file : " + dfn + " ... done"); 804 } 805 } 806 807 public String getRelatedPeopleXML(String type,String subtype,Target target) { 808 String result="\t<"+type+">\n"; 809 List people=getRelatedPeople(type,target); 810 if (people!=null) { 811 for (Iterator i = people.iterator(); i.hasNext();) { 812 Person pr=(Person)i.next(); 813 result+="\t\t<"+subtype; 814 if (pr.getName()!=null) result+=" name=\""+pr.getName()+"\""; 815 if (pr.getCompany()!=null) result+=" company=\""+pr.getCompany()+"\""; 816 if (pr.getReason()!=null) result+=" reason=\""+pr.getReason()+"\""; 817 if (pr.getMailto()!=null) result+=" mailto=\""+pr.getMailto()+"\""; 818 819 result+=" />\n"; 820 } 821 } 822 result+="\t</"+type+">\n"; 823 return result; 824 } 825 826 827 public String getScreenshotsXML(Target target) { 828 String result="\t<screenshots>\n"; 829 ArrayList l=target.getScreenshots(); 830 if (l!=null) { 831 for (Iterator i = l.iterator(); i.hasNext();) { 832 String name=(String )i.next(); 833 String file=(String )i.next(); 834 String description=(String )i.next(); 835 result+="\t\t<screenshot name=\""+name+"\" file=\""+file+"\">"+description+"</screenshot>\n"; 836 } 837 } 838 result+="\t</screenshots>\n"; 839 return result; 840 } 841 842 843 public String getStarturlsXML(Target target) { 844 String result="\t<starturls>\n"; 845 ArrayList l=target.getStarturls(); 846 if (l!=null) { 847 for (Iterator i = l.iterator(); i.hasNext();) { 848 String name=(String )i.next(); 849 String link=(String )i.next(); 850 String description=(String )i.next(); 851 result+="\t\t<url name=\""+name+"\" link=\""+link+"\">"+description+"</url>\n"; 852 } 853 } 854 result+="\t</starturls>\n"; 855 return result; 856 } 857 858 public ArrayList getIncludedPackages(Target target) { 859 return null; 860 } 861 862 public boolean setIncludedVersion(Target target,String id,String newversion) { 863 return false; 864 } 865 866 public boolean delIncludedPackage(Target target,String id) { 867 return false; 868 } 869 870 public boolean addPackage(Target target,String newpackage) { 871 return false; 872 } 873 874 875 public boolean decodeItems(Target target) { 876 decodeIntItem(target,"lastversion"); 877 decodeStringItem(target,"lastdate"); 878 decodeStringItem(target,"maintainer"); 879 decodeStringItem(target,"name"); 880 decodeStringItem(target,"description"); 881 decodeStringItem(target,"releasenotes"); 882 decodeStringItem(target,"installationnotes"); 883 decodeStringItem(target,"installreset"); 884 decodeStringAttributeItem(target,"license","type"); 885 decodeStringAttributeItem(target,"license","version"); 886 decodeStringAttributeItem(target,"license","name"); 887 decodeRelatedPeople(target,"initiators","initiator"); 888 decodeRelatedPeople(target,"supporters","supporter"); 889 decodeRelatedPeople(target,"developers","developer"); 890 decodeRelatedPeople(target,"contacts","contact"); 891 decodeScreenshots(target); 892 decodeStarturls(target); 893 decodePackageDepends(target,"packagedepends"); 894 decodePublishProvider(target); 895 return true; 896 } 897 898 public boolean decodeRelatedPeople(Target target,String type,String subtype) { 899 ExtendedDocumentReader reader=target.getReader(); 900 ArrayList list=new ArrayList (); 901 org.w3c.dom.Node n=reader.getElementByPath(prefix+"."+type); 902 org.w3c.dom.Node n2=n.getFirstChild(); 903 while (n2!=null) { 904 if (n2.getNodeName().equals(subtype)) { 905 Person p=new Person(); 906 NamedNodeMap nm=n2.getAttributes(); 907 if (nm!=null) { 908 org.w3c.dom.Node n3=nm.getNamedItem("name"); 909 if (n3!=null) p.setName(n3.getNodeValue()); 910 n3=nm.getNamedItem("company"); 911 if (n3!=null) p.setCompany(n3.getNodeValue()); 912 n3=nm.getNamedItem("reason"); 913 if (n3!=null) p.setReason(n3.getNodeValue()); 914 n3=nm.getNamedItem("mailto"); 915 if (n3!=null) p.setMailto(n3.getNodeValue()); 916 } 917 list.add(p); 918 } 919 n2=n2.getNextSibling(); 920 } 921 target.setItem(type,list); 922 return true; 923 } 924 925 926 public boolean decodePackageDepends(Target target,String itemname) { 927 ExtendedDocumentReader reader=target.getReader(); 928 ArrayList list=new ArrayList (); 929 org.w3c.dom.Node n=reader.getElementByPath(prefix+".packagedepends"); 930 if (n!=null) { 931 org.w3c.dom.Node n2=n.getFirstChild(); 932 while (n2!=null) { 933 if (n2.getNodeName().equals("package")) { 934 PackageDepend pd=new PackageDepend(); 935 NamedNodeMap nm=n2.getAttributes(); 936 if (nm!=null) { 937 org.w3c.dom.Node n3=nm.getNamedItem("name"); 938 if (n3!=null) pd.setName(n3.getNodeValue()); 939 n3=nm.getNamedItem("type"); 940 if (n3!=null) pd.setType(n3.getNodeValue()); 941 n3=nm.getNamedItem("maintainer"); 942 if (n3!=null) pd.setMaintainer(n3.getNodeValue()); 943 n3=nm.getNamedItem("version"); 944 if (n3!=null) pd.setVersion(n3.getNodeValue()); 945 n3=nm.getNamedItem("versionmode"); 946 if (n3!=null) pd.setVersionMode(n3.getNodeValue()); 947 list.add(pd); 948 } 949 } 950 n2=n2.getNextSibling(); 951 } 952 } 953 target.setItem(itemname,list); 954 return true; 955 } 956 957 958 public boolean decodeScreenshots(Target target) { 959 ExtendedDocumentReader reader=target.getReader(); 960 org.w3c.dom.Node n=reader.getElementByPath(prefix+".screenshots"); 961 if (n!=null) { 962 org.w3c.dom.Node n2=n.getFirstChild(); 963 while (n2!=null) { 964 if (n2.getNodeName().equals("screenshot")) { 965 NamedNodeMap nm=n2.getAttributes(); 966 if (nm!=null) { 967 String name=""; 968 String file=""; 969 String description=""; 970 org.w3c.dom.Node n3=nm.getNamedItem("name"); 971 if (n3!=null) name=n3.getNodeValue(); 972 n3=nm.getNamedItem("file"); 973 if (n3!=null) file=n3.getNodeValue(); 974 n3=n2.getFirstChild(); 975 if (n3!=null) description=n3.getNodeValue(); 976 target.addScreenshot(name,file,description); 977 978 } 979 } 980 n2=n2.getNextSibling(); 981 } 982 } 983 return true; 984 } 985 986 987 public boolean decodeStarturls(Target target) { 988 ExtendedDocumentReader reader=target.getReader(); 989 org.w3c.dom.Node n=reader.getElementByPath(prefix+".starturls"); 990 if (n!=null) { 991 org.w3c.dom.Node n2=n.getFirstChild(); 992 while (n2!=null) { 993 if (n2.getNodeName().equals("url")) { 994 NamedNodeMap nm=n2.getAttributes(); 995 if (nm!=null) { 996 String name=""; 997 String link=""; 998 String description=""; 999 org.w3c.dom.Node n3=nm.getNamedItem("name"); 1000 if (n3!=null) name=n3.getNodeValue(); 1001 n3=nm.getNamedItem("link"); 1002 if (n3!=null) link=n3.getNodeValue(); 1003 n3=n2.getFirstChild(); 1004 if (n3!=null) description=n3.getNodeValue(); 1005 target.addStarturl(name,link,description); 1006 1007 } 1008 } 1009 n2=n2.getNextSibling(); 1010 } 1011 } 1012 return true; 1013 } 1014 1015 public String getItemStringValue(Target target,String name) { 1016 Object o=target.getItem(name); 1017 if (o!=null) return (String )o; 1018 return ""; 1019 } 1020 1021 public int getItemIntValue(Target target,String name) { 1022 Object o=target.getItem(name); 1023 if (o!=null) return ((Integer )o).intValue(); 1024 return -1; 1025 } 1026 1027 public String getDefaultXMLHeader(Target target) { 1028 String body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; body+="<!DOCTYPE "+prefix+" PUBLIC \"-//MMBase/DTD "+prefix+" config 1.0//EN\" \"http://www.mmbase.org/dtd/"+prefix+"_1_0.dtd\">\n"; 1029 body+="<"+prefix+">\n"; 1030 return body; 1031 } 1032 1033 public String getDefaultXMLMetaInfo(Target target) { 1034 int lastversion=getLastVersion(target); 1035 if (lastversion==-1) lastversion=0; 1036 String body="\t<lastversion>"+lastversion+"</lastversion>\n"; 1037 body+="\t<lastdate>"+getLastDate(target)+"</lastdate>\n"; 1038 body+="\t<name>"+getName(target)+"</name>\n"; 1039 body+="\t<maintainer>"+getMaintainer(target)+"</maintainer>\n"; 1040 body+="\t<description>"+getDescription(target)+"</description>\n"; 1041 body+="\t<license type=\""+getLicenseType(target)+"\" version=\""+getLicenseVersion(target)+"\" name=\""+getLicenseName(target)+"\" />\n"; 1042 body+="\t<releasenotes>"+getReleaseNotes(target)+"</releasenotes>\n"; 1043 body+="\t<installationnotes>"+getInstallationNotes(target)+"</installationnotes>\n"; 1044 body+="\t<installreset>"+getInstallReset(target)+"</installreset>\n"; 1045 return body; 1046 } 1047 1048 public String getDefaultXMLFooter(Target target) { 1049 String body="</"+prefix+">\n"; 1050 return body; 1051 } 1052 1053 public boolean updatePackageTime(Target target,Date d,int newversion) { 1054 target.setItem("lastdate",d.toString()); 1055 target.setItem("lastversion",new Integer (newversion)); 1056 return true; 1057 } 1058 1059 public void setDefaults(Target target) { 1060 } 1061 1062 public String getBuildPath() { 1063 String path=PackageManager.getConfigPath()+File.separator+"packaging"+File.separator+"build"+File.separator; 1064 File dir=new File (path); 1065 if (!dir.exists()) { 1066 dir.mkdir(); 1067 } 1068 return path; 1069 } 1070 1071 1072 1073 public boolean decodePublishProvider(Target target) { 1074 ExtendedDocumentReader reader=target.getReader(); 1075 org.w3c.dom.Node n=reader.getElementByPath(prefix+".publishprovider"); 1076 if (n!=null) { 1077 NamedNodeMap nm=n.getAttributes(); 1078 if (nm!=null) { 1079 org.w3c.dom.Node n2=nm.getNamedItem("name"); 1080 if (n2!=null) { 1081 target.setPublishProvider(n2.getNodeValue()); 1082 } 1083 n2=nm.getNamedItem("state"); 1084 if (n2!=null) { 1085 if (n2.getNodeValue().equals("active")) { 1086 target.setPublishState(true); 1087 } 1088 } 1089 n2=nm.getNamedItem("sharepassword"); 1090 if (n2!=null) { 1091 target.setPublishSharePassword(n2.getNodeValue()); 1092 } 1093 } 1094 1095 } 1096 return true; 1097 } 1098 1099 1100 public boolean renameTempFile(String filename) { 1101 File f1 = new File (filename + ".tmp"); 1102 File f2 = new File (filename + ".mmp"); 1103 if (f2.exists()) { 1104 f2.delete(); 1105 } 1106 f2 = new File (filename + ".mmp"); 1107 if (f1.renameTo(f2)) { 1108 return true; 1109 } else { 1110 log.error("rename failed from : "+filename+".tmp to : "+filename + ".mmp"); 1111 return false; 1112 } 1113 } 1114 1115 public String getDefaultTargetName() { 1116 log.error("Creator doesn't supply a default target name, method should be overriden"); 1117 return "unknown"; 1118 } 1119 1120 public String getState() { 1121 return state; 1122 } 1123 1124 public void addRelatedTargetsCreate(Target t) { 1125 relatedtargetcreate.add(t); 1126 } 1127 1128 1133 public void setProgressBar(int stepcount) { 1134 progressbar = 1; 1135 progressstep = 100 / (float) stepcount; 1136 } 1137 1138 1139 1144 public void setSubProgressBar(int substepcount) { 1145 subprogressbar = 1; 1146 subprogressstep = 100 / (float) substepcount; 1147 } 1148 1149 1150 1153 public void increaseProgressBar() { 1154 increaseProgressBar(1); 1155 } 1156 1157 1158 1161 public void increaseSubProgressBar() { 1162 increaseSubProgressBar(1); 1163 } 1164 1165 1166 1171 public void increaseProgressBar(int stepcount) { 1172 progressbar += (stepcount * progressstep); 1173 } 1174 1175 1176 1181 public void increaseSubProgressBar(int substepcount) { 1182 subprogressbar += (substepcount * subprogressstep); 1183 } 1184 1185 1186 1191 public int getProgressBarValue() { 1192 return (int) progressbar; 1193 } 1194 1195 1196 1199 public void setProgressBarValue(int value) { 1200 progressbar=value; 1201 } 1202 1203 1204 1207 public void setSubProgressBarValue(int value) { 1208 subprogressbar=value; 1209 } 1210 1211 1212 1217 public int getSubProgressBarValue() { 1218 return (int) subprogressbar; 1219 } 1220 1221 1222 1223} 1224 | Popular Tags |