package com.openedit.modules.update; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Element; import org.openedit.PlugIn; import com.openedit.ModuleManager; import com.openedit.OpenEditException; import com.openedit.WebServer; import com.openedit.page.manage.PageManager; import com.openedit.util.XmlUtil; public class PlugInFinder { protected ModuleManager fieldModuleManager; protected WebServer fieldWebServer; protected PageManager fieldPageManager; protected List fieldPlugIns; protected String fieldAppServerPath; protected String fieldId; public String getId() { return fieldId; } public void setId(String inId) { fieldId = inId; } public String getAppServerPath() { return fieldAppServerPath; } public void setAppServerPath(String inAppServerPath) { fieldAppServerPath = inAppServerPath; } public List getPlugIns() { if( fieldPlugIns == null) { loadPlugIns(); } return fieldPlugIns; } public void loadPlugIns() { //List installed = getWebServer().getAllPlugIns(); Map installedmap = new HashMap(); // for (Iterator iterator = installed.iterator(); iterator.hasNext();) // { // PlugIn plugin = (PlugIn) iterator.next(); // installedmap.put( plugin.getId(), plugin); // } List available = listAvailablePlugIns(); List notinstalled = new ArrayList(); for (Iterator iterator = available.iterator(); iterator.hasNext();) { Element found = (Element) iterator.next(); String id = found.attributeValue("id"); PlugIn plugin = (PlugIn) installedmap.get(id); if (plugin == null) { plugin = new PlugIn(); plugin.setId(id); plugin.setInstalled(false); notinstalled.add(plugin); } populatePluginDetails(found, plugin); } //fieldInstalledPlugIns = installed; fieldPlugIns = notinstalled; checkDepends(available); } public List listAll() { List sorted = new ArrayList(); //sorted.addAll(getInstalledPlugIns()); sorted.addAll(getPlugIns()); return sorted; } protected void checkDepends(List inAvailable) { for (Iterator iterator = inAvailable.iterator(); iterator.hasNext();) { Element found = (Element) iterator.next(); String depends = found.attributeValue("depends"); if( depends != null && depends.length() > 0) { String id = found.attributeValue("id"); PlugIn thisone = getPlugIn(id); if( thisone != null) { String[] ids = depends.split(","); for (int i = 0; i < ids.length; i++) { PlugIn dep = getPlugIn(ids[i]); thisone.addDependsOn(dep); } } } } } protected void populatePluginDetails(Element found, PlugIn plugin) { plugin.setVendorLink(found.attributeValue("vendorlink")); plugin.setAvailableVersion(found.attributeValue("currentversion")); plugin.setAvailableVersionNotes(found.elementTextTrim("currentversionnotes")); plugin.setLongDescription(found.elementTextTrim("description")); plugin.setInstallScript(found.attributeValue("installscript")); plugin.setTitle(found.attributeValue("title")); } public ModuleManager getModuleManager() { return fieldModuleManager; } public void setModuleManager(ModuleManager inModuleManager) { fieldModuleManager = inModuleManager; } protected List listAvailablePlugIns() { XmlUtil util = new XmlUtil(); try { URL link = new URL(getAppServerPath()); Element root = util.getXml(link.openStream(), "UTF-8"); return root.elements(); } catch( Exception ex) { throw new OpenEditException(ex); } } public WebServer getWebServer() { return fieldWebServer; } public void setWebServer(WebServer inWebServer) { fieldWebServer = inWebServer; } public PageManager getPageManager() { return fieldPageManager; } public void setPageManager(PageManager inPageManager) { fieldPageManager = inPageManager; } public PlugIn getPlugIn(String inPluginid) { // for (Iterator iterator = getInstalledPlugIns().iterator(); iterator.hasNext();) // { // PlugIn plugin = (PlugIn) iterator.next(); // if( inPluginid.equals(plugin.getId()) ) // { // return plugin; // } // } for (Iterator iterator = getPlugIns().iterator(); iterator.hasNext();) { PlugIn plugin = (PlugIn) iterator.next(); if( inPluginid.equals(plugin.getId()) ) { return plugin; } } return null; } }