KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > packaging > packagehandlers > JavaJarPackage


1 /*
2  * This software is OSI Certified Open Source Software.
3  * OSI Certified is a certification mark of the Open Source Initiative.
4  * The license (Mozilla version 1.0) can be read at the MMBase site.
5  * See http://www.MMBase.org/license
6  */

7 package org.mmbase.applications.packaging.packagehandlers;
8
9 import java.io.BufferedInputStream JavaDoc;
10 import java.io.BufferedOutputStream JavaDoc;
11 import java.io.File JavaDoc;
12 import java.io.FileOutputStream JavaDoc;
13 import java.io.IOException JavaDoc;
14 import java.util.Enumeration JavaDoc;
15 import java.util.jar.JarFile JavaDoc;
16 import java.util.zip.ZipEntry JavaDoc;
17
18 import org.mmbase.applications.packaging.InstallManager;
19 import org.mmbase.applications.packaging.PackageManager;
20 import org.mmbase.applications.packaging.installhandlers.installStep;
21 import org.mmbase.util.logging.Logger;
22 import org.mmbase.util.logging.Logging;
23
24 /**
25  * JavaJarPackage, Handler for installing jar files
26  *
27  * @author Daniel Ockeloen (MMBased)
28  */

29 public class JavaJarPackage extends BasicPackage implements PackageInterface {
30
31     private static Logger log = Logging.getLoggerInstance(JavaJarPackage.class);
32
33
34     /**
35      *Constructor for the JavaJarPackage object
36      */

37     public JavaJarPackage() { }
38
39
40     /**
41      * Description of the Method
42      *
43      * @return Description of the Return Value
44      */

45     public boolean install() {
46         boolean result = true;
47         // needs to be set to false on a error
48
try {
49
50             // step1
51
installStep step = getNextInstallStep();
52             step.setUserFeedBack("java/jar installer started");
53
54             // step 2
55
step = getNextInstallStep();
56             step.setUserFeedBack("receiving package ..");
57             JarFile JavaDoc jf = getJarFile();
58             if (jf != null) {
59                  step.setUserFeedBack("receiving package ... done (" + jf + ")");
60
61                  // step 3
62
step = getNextInstallStep();
63                  step.setUserFeedBack("checking dependencies ..");
64                  if (dependsInstalled(jf, step)) {
65
66                      step.setUserFeedBack("checking dependencies ... done");
67
68                      // step 4
69
step = getNextInstallStep();
70                      step.setUserFeedBack("installing jar files ..");
71                      installJars(jf, step);
72                      step.setUserFeedBack("installing jar files ... done");
73
74                      // step 5
75
step = getNextInstallStep();
76                      step.setUserFeedBack("updating mmbase registry ..");
77                      updateRegistryInstalled();
78                      step.setUserFeedBack("updating mmbase registry ... done");
79                  } else {
80                      step.setUserFeedBack("checking dependencies ... failed");
81                      setState("failed");
82                      result = false;
83                  }
84             } else {
85                 step.setUserFeedBack("getting the mmp package...failed (server down or removed disk ? )");
86                 step.setType(installStep.TYPE_ERROR);
87                 try {
88                     Thread.sleep(2000);
89                 } catch(Exception JavaDoc ee) {}
90             }
91
92             // step 6
93
step = getNextInstallStep();
94             step.setUserFeedBack("java/jar installer ended");
95
96         } catch (Exception JavaDoc e) {
97             log.error("install crash on : " + this);
98             result = false;
99         }
100         return result;
101     }
102
103
104     /**
105      * Description of the Method
106      *
107      * @return Description of the Return Value
108      */

109     public boolean uninstall() {
110         try {
111
112             // step1
113
installStep step = getNextInstallStep();
114             step.setUserFeedBack("java/jar uninstaller started");
115
116             // step 3
117
step = getNextInstallStep();
118             step.setUserFeedBack("updating mmbase registry ..");
119             updateRegistryUninstalled();
120             step.setUserFeedBack("updating mmbase registry ... done");
121
122             // step 4
123
step = getNextInstallStep();
124             step.setUserFeedBack("java/jar installer ended");
125
126         } catch (Exception JavaDoc e) {
127             log.error("install crash on : " + this);
128         }
129         return true;
130     }
131
132
133     /**
134      * Description of the Method
135      *
136      * @param jf Description of the Parameter
137      * @param step Description of the Parameter
138      * @return Description of the Return Value
139      */

140     private boolean installJars(JarFile JavaDoc jf, installStep step) {
141         Enumeration JavaDoc e = jf.entries();
142         while (e.hasMoreElements()) {
143             ZipEntry JavaDoc zippy = (ZipEntry JavaDoc) e.nextElement();
144
145             // this is just a demo version, the html package people should figure
146
// out the real format.
147
String JavaDoc name = zippy.getName();
148             String JavaDoc jardir = PackageManager.getConfigPath();
149             jardir = jardir.substring(0, jardir.length() - 6) + "lib" + File.separator;
150
151             // only unpack all thats in the html dir
152
if (name.indexOf("jars/") == 0) {
153                 installStep substep = step.getNextInstallStep();
154                 // remove the "jars/" to get the real install base
155
name = name.substring(5);
156
157                 // check if its a dir or a file
158
if (zippy.isDirectory()) {
159                     File JavaDoc d = new File JavaDoc(jardir + name);
160                     if (!d.exists()) {
161                         substep.setUserFeedBack("creating dir : " + jardir + name + ".. ");
162                         d.mkdir();
163                         substep.setUserFeedBack("creating dir : " + jardir + name + ".. done");
164                     }
165                 } else {
166                     substep.setUserFeedBack("creating file : " + jardir + name + ".. ");
167                     try {
168                         BufferedInputStream JavaDoc in = new BufferedInputStream JavaDoc(jf.getInputStream(zippy));
169                         BufferedOutputStream JavaDoc out = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(jardir + name + "_tmp"));
170             InstallManager.addAutoResetFile(jardir + name + "_tmp");
171                         int val;
172                         while ((val = in.read()) != -1) {
173                             out.write(val);
174                         }
175                         out.close();
176                         substep.setUserFeedBack("creating file : " + jardir + name + ".. done");
177                     } catch (IOException JavaDoc f) {
178                         substep.setUserFeedBack("creating file : " + jardir + name + ".. failed");
179                         f.printStackTrace();
180                     }
181                 }
182             }
183         }
184         return true;
185     }
186
187 }
188
189
Popular Tags