package com.openedit.modules.update; import java.io.File; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openedit.PlugIn; import com.openedit.WebPageRequest; import com.openedit.entermedia.scripts.Script; import com.openedit.entermedia.scripts.ScriptLogger; import com.openedit.modules.scriptrunner.ScriptModule; public class Upgrader { private static final Log log = LogFactory.getLog(Upgrader.class); protected ScriptModule fieldScriptModule; protected File fieldRoot; protected PlugInFinder fieldPlugInFinder; protected String[] fieldToUpgrade; protected Set fieldCompleted; protected Set fieldInProgress; protected boolean cancel = false; public String[] getList() { return fieldToUpgrade; } public void setToUpgrade(String[] inList) { fieldToUpgrade = inList; } public List upgrade( String inPlugInId, WebPageRequest inContext ) { ScriptLogger logger = new ScriptLogger(); logger.startCapture(); try { doUpgrade(inPlugInId, inContext, logger); } finally { logger.stopCapture(); } return logger.listLogs(); } protected void doUpgrade( String inPlugInId, WebPageRequest inContext,ScriptLogger inLogger ) { if( getInProgress().contains(inPlugInId)) { log.info(inPlugInId + " is in progress"); return; } if( cancel) { log.info(inPlugInId + " is canceled"); return; } getInProgress().add(inPlugInId); String strOutputFile = "/WEB-INF/install.js"; File out = new File(getRoot(), strOutputFile); PlugIn plugin = (PlugIn)getPlugInFinder().getPlugIn(inPlugInId); if( plugin.getInstallScript() == null) { log.info("No script configured"); } else { try { // *** connect to configured web site new Downloader().download(plugin.getInstallScript(), out); Map variables = new HashMap(); variables.put("context", inContext); variables.put("log", inLogger); Script script = getScriptModule().getScriptManager().loadScript(strOutputFile); getScriptModule().getScriptManager().execScript(variables, script); } catch (Exception ex) { log.error(ex); } } getCompleted().add(inPlugInId); getInProgress().remove(inPlugInId); if( getCompleted().size() == getList().length) { inContext.removeSessionValue("upgrader"); } log.info(inPlugInId + " is complete"); } public ScriptModule getScriptModule() { return fieldScriptModule; } public void setScriptModule(ScriptModule inScriptModule) { fieldScriptModule = inScriptModule; } public File getRoot() { return fieldRoot; } public void setRoot(File inRoot) { fieldRoot = inRoot; } public PlugInFinder getPlugInFinder() { return fieldPlugInFinder; } public void setPlugInFinder(PlugInFinder inAllPluginS) { fieldPlugInFinder = inAllPluginS; } public Set getCompleted() { if( fieldCompleted == null) { fieldCompleted = new HashSet(); } return fieldCompleted; } public Set getInProgress() { if (fieldInProgress == null) { fieldInProgress = new HashSet(); } return fieldInProgress; } public void cancel() { cancel = true; } public boolean isCanceled() { return cancel; } public boolean isComplete() { return getCompleted().size() == getList().length; } }