1 7 package org.mmbase.applications.packaging.packagehandlers; 8 9 import java.io.BufferedOutputStream ; 10 import java.io.DataOutputStream ; 11 import java.io.File ; 12 import java.io.FileOutputStream ; 13 import java.io.IOException ; 14 import java.io.InputStream ; 15 import java.util.Enumeration ; 16 import java.util.Iterator ; 17 import java.util.jar.JarFile ; 18 import java.util.zip.ZipEntry ; 19 20 import org.mmbase.applications.packaging.PackageManager; 21 import org.mmbase.applications.packaging.installhandlers.installStep; 22 import org.mmbase.applications.packaging.util.ExtendedDocumentReader; 23 import org.mmbase.module.core.MMBaseContext; 24 import org.mmbase.util.logging.Logger; 25 import org.mmbase.util.logging.Logging; 26 import org.w3c.dom.Element ; 27 28 33 public class DisplayThemePackage extends BasicPackage implements PackageInterface { 34 35 private static Logger log = Logging.getLoggerInstance(DisplayThemePackage.class); 36 37 38 41 public DisplayThemePackage() { } 42 43 44 49 public boolean install() { 50 boolean result = true; 51 try { 53 54 installStep step = getNextInstallStep(); 56 step.setUserFeedBack("display/theme installer started"); 57 setProgressBar(1000); 58 60 step = getNextInstallStep(); 62 step.setUserFeedBack("receiving package .."); 63 JarFile jf = getJarFile(); 64 if (jf != null) { 65 step.setUserFeedBack("receiving package ... done (" + jf + ")"); 66 67 increaseProgressBar(100); 68 70 step = getNextInstallStep(); 72 step.setUserFeedBack("checking dependencies .."); 73 if (dependsInstalled(jf, step)) { 74 75 increaseProgressBar(100); 76 78 step.setUserFeedBack("checking dependencies ... done"); 79 80 step = getNextInstallStep(); 82 step.setUserFeedBack("installing theme .."); 83 installTheme(jf, step); 84 step.setUserFeedBack("installing theme ... done"); 85 86 increaseProgressBar(100); 87 89 step = getNextInstallStep(); 91 step.setUserFeedBack("updating mmbase registry .."); 92 updateRegistryInstalled(); 93 increaseProgressBar(100); 94 step.setUserFeedBack("updating mmbase registry ... done"); 96 } else { 97 step.setUserFeedBack("checking dependencies ... failed"); 98 setState("failed"); 99 result = false; 100 } 101 } else { 102 step.setUserFeedBack("getting the mmp package...failed (server down or removed disk ? )"); 103 step.setType(installStep.TYPE_ERROR); 104 try { 105 Thread.sleep(2000); 106 } catch(Exception ee) {} 107 } 108 109 110 step = getNextInstallStep(); 112 step.setUserFeedBack("display/theme installer ended"); 113 increaseProgressBar(100); 114 116 } catch (Exception e) { 117 log.error("install crash on : " + this); 118 result = false; 119 } 120 return result; 121 } 122 123 124 129 public boolean uninstall() { 130 try { 131 132 installStep step = getNextInstallStep(); 134 step.setUserFeedBack("display/theme uninstaller started"); 135 136 step = getNextInstallStep(); 138 step.setUserFeedBack("updating mmbase registry .."); 139 updateRegistryUninstalled(); 140 step.setUserFeedBack("updating mmbase registry ... done"); 141 142 step = getNextInstallStep(); 144 step.setUserFeedBack("display/theme installer ended"); 145 146 } catch (Exception e) { 147 log.error("install crash on : " + this); 148 } 149 return true; 150 } 151 152 153 160 private boolean installTheme(JarFile jf, installStep step) { 161 String themename = null; 162 Enumeration e = jf.entries(); 163 increaseProgressBar(100); 164 while (e.hasMoreElements()) { 166 increaseProgressBar(1); 167 ZipEntry zippy = (ZipEntry ) e.nextElement(); 169 170 String name = zippy.getName(); 173 174 if (name.indexOf("META-INF")==-1) { 176 String localfile = MMBaseContext.getHtmlRoot() + File.separator + "mmbase"+File.separator+"thememanager"+File.separator+name; 177 if (name.indexOf("theme.xml")!=-1) { 178 localfile = PackageManager.getConfigPath() + File.separator + "thememanager" + File.separator + "themes"+ File.separator+name; 179 themename = name.substring(0,name.indexOf('/')); 180 String dirname = MMBaseContext.getHtmlRoot() + File.separator + "mmbase"+File.separator+"thememanager"+File.separator+"images"+File.separator+themename; 181 File d = new File (dirname); 182 if (!d.exists()) { 183 d.mkdir(); 184 } 185 dirname = PackageManager.getConfigPath() + File.separator + "thememanager" + File.separator + "themes"+ File.separator+themename; 186 d = new File (dirname); 187 if (!d.exists()) { 188 d.mkdir(); 189 } 190 dirname = MMBaseContext.getHtmlRoot() + File.separator + "mmbase"+File.separator+"thememanager"+File.separator+"css"+File.separator+themename; 191 d = new File (dirname); 192 if (!d.exists()) { 193 d.mkdir(); 194 } 195 } 196 197 198 installStep substep = step.getNextInstallStep(); 199 200 if (zippy.isDirectory()) { 202 File d = new File (localfile); 203 if (!d.exists()) { 204 substep.setUserFeedBack("creating dir : " + localfile + ".. "); 205 d.mkdir(); 206 substep.setUserFeedBack("creating dir : " + localfile + ".. done"); 207 } 208 } else { 209 substep.setUserFeedBack("creating file : " + localfile + ".. "); 210 try { 211 InputStream in = jf.getInputStream(zippy); 212 BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream (localfile)); 213 int val; 214 while ((val = in.read()) != -1) { 215 out.write(val); 216 } 217 out.close(); 218 substep.setUserFeedBack("creating file : " + localfile + ".. done"); 219 } catch (IOException f) { 220 substep.setUserFeedBack("creating file : " + localfile + ".. failed"); 221 f.printStackTrace(); 222 } 223 } 224 } 225 } 226 if (themename != null) { 227 installStep substep = step.getNextInstallStep(); 228 substep.setUserFeedBack("adding theme to manager ... "); 229 if (addThemeName(themename)) { 230 substep.setUserFeedBack("adding theme to manager ... done "); 231 } else { 232 substep.setUserFeedBack("adding theme to manager ... failed "); 233 } 234 } 235 increaseProgressBar(100); 236 return true; 238 } 239 240 private boolean addThemeName(String themename) { 241 String themedir = PackageManager.getConfigPath() + File.separator + "thememanager" + File.separator; 242 ExtendedDocumentReader reader = new ExtendedDocumentReader(themedir + "themes.xml", DisplayThemePackage.class); 243 String body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 244 body += "<!DOCTYPE themes PUBLIC \"//MMBase - themes //\" \"http://www.mmbase.org/dtd/themes_1_0.dtd\">\n"; 245 body += "<themes>\n"; 246 boolean found = false; 247 for (Iterator ns = reader.getChildElements("themes", "theme"); ns.hasNext(); ) { 248 Element n = (Element ) ns.next(); 249 String oldname = n.getAttribute("id"); 250 String oldfile = n.getAttribute("file"); 251 body += "\t<theme id=\"" + oldname + "\" file=\"" + oldfile + "\" />\n"; 252 if (themename.equals(oldname)) { 253 found = true; 254 } 255 } 256 257 if (!found) { 258 body += "\t<theme id=\"" + themename + "\" file=\"themes/" + themename + "/theme.xml\" />\n"; 259 body += "</themes>\n"; 260 saveFile(themedir + "themes.xml", body); 261 } 262 return true; 263 } 264 265 266 273 static boolean saveFile(String filename, String value) { 274 File sfile = new File (filename); 275 try { 276 DataOutputStream scan = new DataOutputStream (new FileOutputStream (sfile)); 277 scan.writeBytes(value); 278 scan.flush(); 279 scan.close(); 280 } catch (Exception e) { 281 log.error(Logging.stackTrace(e)); 282 } 283 return true; 284 } 285 286 } 287 288 | Popular Tags |