KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > packaging > projects > creators > BasicCreator


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.applications.packaging.projects.creators;
12
13 import java.io.File JavaDoc;
14 import java.io.FileInputStream JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Date JavaDoc;
17 import java.util.Iterator JavaDoc;
18 import java.util.List JavaDoc;
19 import java.util.StringTokenizer JavaDoc;
20 import java.util.jar.JarEntry JavaDoc;
21 import java.util.jar.JarOutputStream JavaDoc;
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 JavaDoc;
33
34 /**
35  * BasicCreator, base class for creators
36  *
37  * @author Daniel Ockeloen (MMBased)
38  */

39 public class BasicCreator implements CreatorInterface,Runnable JavaDoc {
40     private static Logger log = Logging.getLoggerInstance(BasicCreator.class);
41     Class JavaDoc cl;
42     String JavaDoc prefix;
43
44     private Target threadtarget;
45     private int threadversion;
46     private String JavaDoc state = "done";
47     
48     private String JavaDoc type="unknown/unknown";
49     private String JavaDoc description="";
50
51
52     private ArrayList JavaDoc packagesteps;
53     private packageStep projectstep;
54     ArrayList JavaDoc relatedtargetcreate = new ArrayList JavaDoc();
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 JavaDoc getDescription() {
65     return description;
66     }
67
68     public String JavaDoc getType() {
69     if (type==null) return "";
70     return type;
71     }
72
73     public void setType(String JavaDoc type) {
74     this.type=type;
75     }
76
77    public boolean setDescription(Target target,String JavaDoc newdescription) {
78     target.setItem("description",newdescription);
79     target.save();
80     return true;
81    }
82
83
84    public boolean setName(Target target,String JavaDoc newname) {
85     target.setItem("name",newname);
86     target.save();
87     return true;
88    }
89
90
91    public boolean setMaintainer(Target target,String JavaDoc newmaintainer) {
92     target.setItem("maintainer",newmaintainer);
93     target.save();
94     return true;
95    }
96
97    public boolean setLicenseVersion(Target target,String JavaDoc newlicenseversion) {
98     target.setItem("license.version",newlicenseversion);
99     target.save();
100     return true;
101    }
102
103    public boolean setLicenseType(Target target,String JavaDoc newlicensetype) {
104     target.setItem("license.type",newlicensetype);
105     target.save();
106     return true;
107    }
108
109    public boolean setLicenseName(Target target,String JavaDoc 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 JavaDoc 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 JavaDoc kicker = new Thread JavaDoc(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 JavaDoc newpackage,String JavaDoc version) {
149         ArrayList JavaDoc packagedepends=(ArrayList JavaDoc)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 JavaDoc packageid,String JavaDoc version,String JavaDoc versionmode) {
165         ArrayList JavaDoc packagedepends=(ArrayList JavaDoc)target.getItem("packagedepends");
166         for (Iterator JavaDoc 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 JavaDoc packageid,String JavaDoc oldversion,String JavaDoc oldversionmode,String JavaDoc newversion,String JavaDoc newversionmode) {
179         ArrayList JavaDoc packagedepends=(ArrayList JavaDoc)target.getItem("packagedepends");
180         for (Iterator JavaDoc 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 JavaDoc getPackageDepends(Target target) {
193     Object JavaDoc o=target.getItem("packagedepends");
194     if (o!=null) return (ArrayList JavaDoc)o;
195     return new ArrayList JavaDoc();
196    }
197
198    public boolean addPackageInitiator(Target target,String JavaDoc newname,String JavaDoc newcompany) {
199     ArrayList JavaDoc list=getRelatedPeople("initiators",target);
200     if (list==null) {
201         list=new ArrayList JavaDoc();
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 JavaDoc oldname,String JavaDoc newname,String JavaDoc oldcompany,String JavaDoc newcompany) {
213     ArrayList JavaDoc people=getRelatedPeople("initiators",target);
214         for (Iterator JavaDoc 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 JavaDoc oldname,String JavaDoc oldcompany) {
228     ArrayList JavaDoc people=getRelatedPeople("initiators",target);
229         for (Iterator JavaDoc 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 JavaDoc newname,String JavaDoc newcompany) {
242     ArrayList JavaDoc list=getRelatedPeople("developers",target);
243         if (list==null) {
244                 list=new ArrayList JavaDoc();
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 JavaDoc oldname,String JavaDoc newname,String JavaDoc oldcompany,String JavaDoc newcompany) {
256     ArrayList JavaDoc people=getRelatedPeople("developers",target);
257         for (Iterator JavaDoc 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 JavaDoc oldname,String JavaDoc oldcompany) {
271     ArrayList JavaDoc people=getRelatedPeople("developers",target);
272         for (Iterator JavaDoc 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 JavaDoc newreason,String JavaDoc newname,String JavaDoc newemail) {
285     ArrayList JavaDoc list=getRelatedPeople("contacts",target);
286         if (list==null) {
287                 list=new ArrayList JavaDoc();
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 JavaDoc oldreason,String JavaDoc newreason,String JavaDoc oldname,String JavaDoc newname,String JavaDoc oldemail,String JavaDoc newemail) {
300     ArrayList JavaDoc people=getRelatedPeople("contacts",target);
301         for (Iterator JavaDoc 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 JavaDoc oldreason,String JavaDoc oldname,String JavaDoc oldemail) {
316     ArrayList JavaDoc people=getRelatedPeople("contacts",target);
317         for (Iterator JavaDoc 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 JavaDoc newcompany) {
330     ArrayList JavaDoc list=getRelatedPeople("supporters",target);
331         if (list==null) {
332                 list=new ArrayList JavaDoc();
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 JavaDoc oldcompany,String JavaDoc newcompany) {
343     ArrayList JavaDoc people=getRelatedPeople("supporters",target);
344         for (Iterator JavaDoc 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 JavaDoc oldcompany) {
357     ArrayList JavaDoc people=getRelatedPeople("supporters",target);
358         for (Iterator JavaDoc 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 JavaDoc epath) {
371     ExtendedDocumentReader reader=target.getReader();
372         String JavaDoc value=reader.getElementValue(prefix+"."+epath);
373     try {
374         target.setItem(epath,new Integer JavaDoc(Integer.parseInt(value)));
375     } catch(Exception JavaDoc e) {
376         return false;
377     }
378     return true;
379    }
380
381
382    public boolean decodeStringItem(Target target,String JavaDoc epath) {
383     ExtendedDocumentReader reader=target.getReader();
384         String JavaDoc 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 JavaDoc epath,String JavaDoc attribute) {
395     ExtendedDocumentReader reader=target.getReader();
396         org.w3c.dom.Node JavaDoc n=reader.getElementByPath(prefix+"."+epath);
397         NamedNodeMap JavaDoc nm=n.getAttributes();
398         if (nm!=null) {
399                String JavaDoc value=null;
400                 org.w3c.dom.Node JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc getPackageSteps(int logid) {
441     // well maybe its one of my subs ?
442
Iterator JavaDoc e=getPackageSteps();
443     while (e.hasNext()) {
444         packageStep step=(packageStep)e.next();
445         Object JavaDoc o=step.getPackageSteps(logid);
446         if (o!=null) {
447             return (Iterator JavaDoc)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                 // create new step
459
step=new packageStep();
460         }
461         if (packagesteps==null) {
462                 packagesteps=new ArrayList JavaDoc();
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 JavaDoc getFileNames(ArrayList JavaDoc foundfiles,String JavaDoc basedir,String JavaDoc include,String JavaDoc exclude) {
477     // wrapper because we only want to filter it 1 time and not recursive
478
ArrayList JavaDoc files=getFileNames_r(foundfiles,basedir,include,exclude);
479     ArrayList JavaDoc filtered=new ArrayList JavaDoc();
480     
481     // tricky : a filter all unused dirs
482
Iterator JavaDoc e=files.iterator();
483     while (e.hasNext()) {
484         String JavaDoc fn=(String JavaDoc)e.next();
485         if (fn.endsWith(File.separator)) {
486             Iterator JavaDoc f=files.iterator();
487             while (f.hasNext()) {
488                 String JavaDoc fn2=(String JavaDoc)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 JavaDoc getFileNames_r(ArrayList JavaDoc foundfiles,String JavaDoc basedir,String JavaDoc include,String JavaDoc exclude) {
502         File JavaDoc currDir = new File JavaDoc(basedir);
503     if (currDir!=null && currDir.isDirectory()) {
504         String JavaDoc files[] = currDir.list();
505         for (int i=0; i<files.length; i++) {
506         File JavaDoc tfile=new File JavaDoc(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 JavaDoc 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 JavaDoc tfile,String JavaDoc fullname,String JavaDoc 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 JavaDoc tok = new StringTokenizer JavaDoc(excludestring,",\n\r");
532     while (tok.hasMoreTokens()) {
533         String JavaDoc ex=tok.nextToken();
534         if (ex.startsWith("t(")) {
535         } else if (ex.startsWith("s(")) {
536             try {
537                 String JavaDoc tmp=ex.substring(2);
538                 int maxfsize=Integer.parseInt(tmp.substring(0,tmp.indexOf(")")));
539                 if (length>maxfsize) return true;
540             } catch(Exception JavaDoc e) {
541             }
542         } else if (ex.startsWith("a(")) {
543             try {
544                 String JavaDoc tmp=ex.substring(2);
545                 int age=3600*Integer.parseInt(tmp.substring(0,tmp.indexOf(")")));
546                 if (fileage>age) return true;
547             } catch(Exception JavaDoc e) {
548             }
549         } else if (fullname.indexOf(ex)!=-1) {
550             return true;
551         }
552     }
553     return false;
554    }
555
556    public String JavaDoc getXMLFile(Target target) {
557     log.error("getXMLFile not implemented in creator : "+this);
558     return null;
559    }
560
561    public void createPackageMetaFile(JarOutputStream JavaDoc jarfile,Target target,int newversion) {
562     Date JavaDoc d=new Date JavaDoc();
563     String JavaDoc 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 JavaDoc entry = new JarEntry JavaDoc("package.xml");
579             jarfile.putNextEntry(entry);
580             jarfile.write(body.getBytes("UTF-8"));
581     } catch (Exception JavaDoc e) {
582         e.printStackTrace();
583     }
584    }
585
586
587    public String JavaDoc getPackageDependsXML(Target target) {
588     String JavaDoc body="\t<packagedepends>\n";
589     ArrayList JavaDoc packagedepends=getPackageDepends(target);
590     if (packagedepends!=null) {
591             for (Iterator JavaDoc 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 JavaDoc jarfile,Target target) {
608     String JavaDoc 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 JavaDoc packagedepends=getPackageDepends(target);
613     if (packagedepends!=null) {
614             for (Iterator JavaDoc 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 JavaDoc entry = new JarEntry JavaDoc("depends.xml");
628             jarfile.putNextEntry(entry);
629             jarfile.write(body.getBytes("UTF-8"));
630     } catch (Exception JavaDoc e) {
631         e.printStackTrace();
632     }
633    }
634
635    public int addFiles(JarOutputStream JavaDoc jarfile,String JavaDoc basedir,String JavaDoc include,String JavaDoc exclude,String JavaDoc guiname,String JavaDoc 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 JavaDoc files=getFileNames(new ArrayList JavaDoc(),basedir,include,exclude).iterator();
648             while (files.hasNext()) {
649                 String JavaDoc fn=(String JavaDoc)files.next();
650                                 if (!fn.endsWith("/")) {
651                     FileInputStream JavaDoc file = new FileInputStream JavaDoc(fn);
652                     packageStep substep=step.getNextPackageStep();
653                     substep.setUserFeedBack("adding "+guiname+" file : "+fn);
654                     try {
655                         JarEntry JavaDoc entry = new JarEntry JavaDoc(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 JavaDoc e) {
663                         substep.setUserFeedBack("failed added "+guiname+" file : "+fn.substring(baselen));
664                     } finally {
665                         file.close();
666                     }
667                 } else {
668                         JarEntry JavaDoc entry = new JarEntry JavaDoc(dirprefix+fn.substring(baselen));
669                             jarfile.putNextEntry(entry);
670                 }
671             }
672         } catch (Exception JavaDoc e) {
673             e.printStackTrace();
674         }
675         step.setUserFeedBack("added "+filesadded+" "+guiname+" files... done");
676     return filesadded;
677    }
678
679    public String JavaDoc getDescription(Target target) {
680         return(getItemStringValue(target,"description"));
681    }
682
683    public String JavaDoc getReleaseNotes(Target target) {
684         return(getItemStringValue(target,"releasenotes"));
685    }
686
687    public String JavaDoc getInstallReset(Target target) {
688         String JavaDoc tmp=getItemStringValue(target,"installreset");
689     if (tmp!=null && !tmp.equals("")) {
690         return tmp;
691     }
692     return "false";
693    }
694
695    public String JavaDoc getInstallationNotes(Target target) {
696         return(getItemStringValue(target,"installationnotes"));
697    }
698
699    public String JavaDoc getMaintainer(Target target) {
700         return(getItemStringValue(target,"maintainer"));
701    }
702
703    public String JavaDoc getName(Target target) {
704         return(getItemStringValue(target,"name"));
705    }
706
707    public String JavaDoc getLicenseType(Target target) {
708         return(getItemStringValue(target,"license.type"));
709    }
710
711    public String JavaDoc getLicenseName(Target target) {
712         return(getItemStringValue(target,"license.name"));
713    }
714
715    public String JavaDoc getLicenseVersion(Target target) {
716         return(getItemStringValue(target,"license.version"));
717    }
718
719    public ArrayList JavaDoc getRelatedPeople(String JavaDoc type,Target target) {
720     Object JavaDoc o=target.getItem(type);
721     if (o!=null) return (ArrayList JavaDoc)o;
722     return null;
723    }
724
725
726    public void addFile(JarOutputStream JavaDoc jarfile,String JavaDoc fn,String JavaDoc dfn,String JavaDoc guiname,String JavaDoc 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 JavaDoc file = new FileInputStream JavaDoc(fn);
736                 try {
737                     JarEntry JavaDoc entry = new JarEntry JavaDoc(dfn);
738                         jarfile.putNextEntry(entry);
739                     while ((bytesRead = file.read(buffer)) != -1) {
740                         jarfile.write(buffer, 0, bytesRead);
741                     }
742                 } catch (Exception JavaDoc e) {
743                 } finally {
744                 file.close();
745                 }
746         } else {
747                 JarEntry JavaDoc entry = new JarEntry JavaDoc(dfn);
748                     jarfile.putNextEntry(entry);
749         }
750     } catch (Exception JavaDoc 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 JavaDoc jarfile,Target target) {
760        try {
761             JarEntry JavaDoc entry = new JarEntry JavaDoc("screenshots" + File.separator);
762             jarfile.putNextEntry(entry);
763         }
764         catch (Exception JavaDoc e) {
765             e.printStackTrace();
766             return;
767         }
768
769         for (Iterator JavaDoc i = target.getScreenshots().iterator(); i.hasNext();) {
770             String JavaDoc name = (String JavaDoc) i.next();
771             String JavaDoc filen = (String JavaDoc) i.next(); // not used here
772
String JavaDoc description = (String JavaDoc) i.next(); // not used here
773
String JavaDoc fn = target.getBaseDir() + "packaging" + File.separator + filen;
774
775             String JavaDoc 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 JavaDoc file = new FileInputStream JavaDoc(fn);
782                 try {
783                     JarEntry JavaDoc entry = new JarEntry JavaDoc(dfn);
784                     jarfile.putNextEntry(entry);
785                     while ((bytesRead = file.read(buffer)) != -1) {
786                         jarfile.write(buffer, 0, bytesRead);
787                     }
788                 }
789                 catch (Exception JavaDoc e) {
790                 }
791                 finally {
792                     file.close();
793                 }
794             }
795             catch (Exception JavaDoc 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 JavaDoc getRelatedPeopleXML(String JavaDoc type,String JavaDoc subtype,Target target) {
808     String JavaDoc result="\t<"+type+">\n";
809     List JavaDoc people=getRelatedPeople(type,target);
810     if (people!=null) {
811             for (Iterator JavaDoc 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 JavaDoc getScreenshotsXML(Target target) {
828     String JavaDoc result="\t<screenshots>\n";
829     ArrayList JavaDoc l=target.getScreenshots();
830     if (l!=null) {
831             for (Iterator JavaDoc i = l.iterator(); i.hasNext();) {
832             String JavaDoc name=(String JavaDoc)i.next();
833             String JavaDoc file=(String JavaDoc)i.next();
834             String JavaDoc description=(String JavaDoc)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 JavaDoc getStarturlsXML(Target target) {
844     String JavaDoc result="\t<starturls>\n";
845     ArrayList JavaDoc l=target.getStarturls();
846     if (l!=null) {
847             for (Iterator JavaDoc i = l.iterator(); i.hasNext();) {
848             String JavaDoc name=(String JavaDoc)i.next();
849             String JavaDoc link=(String JavaDoc)i.next();
850             String JavaDoc description=(String JavaDoc)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 JavaDoc getIncludedPackages(Target target) {
859     return null;
860   }
861
862   public boolean setIncludedVersion(Target target,String JavaDoc id,String JavaDoc newversion) {
863     return false;
864   }
865
866   public boolean delIncludedPackage(Target target,String JavaDoc id) {
867     return false;
868   }
869
870   public boolean addPackage(Target target,String JavaDoc 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 JavaDoc type,String JavaDoc subtype) {
899     ExtendedDocumentReader reader=target.getReader();
900     ArrayList JavaDoc list=new ArrayList JavaDoc();
901         org.w3c.dom.Node JavaDoc n=reader.getElementByPath(prefix+"."+type);
902         org.w3c.dom.Node JavaDoc n2=n.getFirstChild();
903         while (n2!=null) {
904             if (n2.getNodeName().equals(subtype)) {
905             Person p=new Person();
906                 NamedNodeMap JavaDoc nm=n2.getAttributes();
907                     if (nm!=null) {
908                             org.w3c.dom.Node JavaDoc 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 JavaDoc itemname) {
927     ExtendedDocumentReader reader=target.getReader();
928     ArrayList JavaDoc list=new ArrayList JavaDoc();
929         org.w3c.dom.Node JavaDoc n=reader.getElementByPath(prefix+".packagedepends");
930     if (n!=null) {
931         org.w3c.dom.Node JavaDoc n2=n.getFirstChild();
932         while (n2!=null) {
933             if (n2.getNodeName().equals("package")) {
934             PackageDepend pd=new PackageDepend();
935                 NamedNodeMap JavaDoc nm=n2.getAttributes();
936                     if (nm!=null) {
937                             org.w3c.dom.Node JavaDoc 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 JavaDoc n=reader.getElementByPath(prefix+".screenshots");
961     if (n!=null) {
962         org.w3c.dom.Node JavaDoc n2=n.getFirstChild();
963         while (n2!=null) {
964             if (n2.getNodeName().equals("screenshot")) {
965                 NamedNodeMap JavaDoc nm=n2.getAttributes();
966                     if (nm!=null) {
967                 String JavaDoc name="";
968                 String JavaDoc file="";
969                 String JavaDoc description="";
970                             org.w3c.dom.Node JavaDoc 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 JavaDoc n=reader.getElementByPath(prefix+".starturls");
990     if (n!=null) {
991         org.w3c.dom.Node JavaDoc n2=n.getFirstChild();
992         while (n2!=null) {
993             if (n2.getNodeName().equals("url")) {
994                 NamedNodeMap JavaDoc nm=n2.getAttributes();
995                     if (nm!=null) {
996                 String JavaDoc name="";
997                 String JavaDoc link="";
998                 String JavaDoc description="";
999                             org.w3c.dom.Node JavaDoc 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 JavaDoc getItemStringValue(Target target,String JavaDoc name) {
1016    Object JavaDoc o=target.getItem(name);
1017    if (o!=null) return (String JavaDoc)o;
1018    return "";
1019   }
1020
1021   public int getItemIntValue(Target target,String JavaDoc name) {
1022    Object JavaDoc o=target.getItem(name);
1023    if (o!=null) return ((Integer JavaDoc)o).intValue();
1024    return -1;
1025   }
1026
1027   public String JavaDoc getDefaultXMLHeader(Target target) {
1028       String JavaDoc 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 JavaDoc getDefaultXMLMetaInfo(Target target) {
1034    int lastversion=getLastVersion(target);
1035    if (lastversion==-1) lastversion=0;
1036        String JavaDoc 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 JavaDoc getDefaultXMLFooter(Target target) {
1049        String JavaDoc body="</"+prefix+">\n";
1050    return body;
1051   }
1052
1053   public boolean updatePackageTime(Target target,Date JavaDoc d,int newversion) {
1054    target.setItem("lastdate",d.toString());
1055    target.setItem("lastversion",new Integer JavaDoc(newversion));
1056    return true;
1057   }
1058
1059   public void setDefaults(Target target) {
1060   }
1061
1062   public String JavaDoc getBuildPath() {
1063    String JavaDoc path=PackageManager.getConfigPath()+File.separator+"packaging"+File.separator+"build"+File.separator;
1064    File JavaDoc dir=new File JavaDoc(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 JavaDoc n=reader.getElementByPath(prefix+".publishprovider");
1076    if (n!=null) {
1077            NamedNodeMap JavaDoc nm=n.getAttributes();
1078            if (nm!=null) {
1079                    org.w3c.dom.Node JavaDoc 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 JavaDoc filename) {
1101            File JavaDoc f1 = new File JavaDoc(filename + ".tmp");
1102            File JavaDoc f2 = new File JavaDoc(filename + ".mmp");
1103        if (f2.exists()) {
1104        f2.delete();
1105        }
1106            f2 = new File JavaDoc(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 JavaDoc getDefaultTargetName() {
1116    log.error("Creator doesn't supply a default target name, method should be overriden");
1117    return "unknown";
1118  }
1119
1120  public String JavaDoc getState() {
1121    return state;
1122  }
1123
1124  public void addRelatedTargetsCreate(Target t) {
1125      relatedtargetcreate.add(t);
1126  }
1127
1128    /**
1129     * Sets the progressBar attribute of the BasicPackage object
1130     *
1131     * @param stepcount The new progressBar value
1132     */

1133    public void setProgressBar(int stepcount) {
1134        progressbar = 1;
1135        progressstep = 100 / (float) stepcount;
1136    }
1137
1138
1139    /**
1140     * Sets the progressBar attribute of the BasicPackage object
1141     *
1142     * @param stepcount The new progressBar value
1143     */

1144    public void setSubProgressBar(int substepcount) {
1145        subprogressbar = 1;
1146        subprogressstep = 100 / (float) substepcount;
1147    }
1148
1149
1150    /**
1151     * Description of the Method
1152     */

1153    public void increaseProgressBar() {
1154        increaseProgressBar(1);
1155    }
1156
1157
1158    /**
1159     * Description of the Method
1160     */

1161    public void increaseSubProgressBar() {
1162        increaseSubProgressBar(1);
1163    }
1164
1165
1166    /**
1167     * Description of the Method
1168     *
1169     * @param stepcount Description of the Parameter
1170     */

1171    public void increaseProgressBar(int stepcount) {
1172        progressbar += (stepcount * progressstep);
1173    }
1174
1175
1176    /**
1177     * Description of the Method
1178     *
1179     * @param stepcount Description of the Parameter
1180     */

1181    public void increaseSubProgressBar(int substepcount) {
1182        subprogressbar += (substepcount * subprogressstep);
1183    }
1184
1185
1186    /**
1187     * Gets the progressBarValue attribute of the BasicPackage object
1188     *
1189     * @return The progressBarValue value
1190     */

1191    public int getProgressBarValue() {
1192        return (int) progressbar;
1193    }
1194
1195
1196    /**
1197     * set the progressBarValue attribute of the BasicPackage object
1198     */

1199    public void setProgressBarValue(int value) {
1200    progressbar=value;
1201    }
1202
1203
1204    /**
1205     * set the subprogressBarValue attribute of the BasicPackage object
1206     */

1207    public void setSubProgressBarValue(int value) {
1208    subprogressbar=value;
1209    }
1210
1211
1212    /**
1213     * Gets the progressBarValue attribute of the BasicPackage object
1214     *
1215     * @return The progressBarValue value
1216     */

1217    public int getSubProgressBarValue() {
1218        return (int) subprogressbar;
1219    }
1220
1221
1222
1223}
1224
Popular Tags