package com.delcyon.capo.modules; import java.util.logging.Level; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.delcyon.capo.CapoApplication; import com.delcyon.capo.Configuration; import com.delcyon.capo.CapoApplication.Location; import com.delcyon.capo.Configuration.PREFERENCE; import com.delcyon.capo.annotations.DirectoyProvider; import com.delcyon.capo.modules.ModuleRequestProcessor.Attributes; import com.delcyon.capo.protocol.client.CapoConnection; @DirectoyProvider(preferenceName="MODULE_DIR",preferences=Configuration.PREFERENCE.class,location=Location.SERVER) public abstract class ModuleProvider { public static Element getModuleElement(String localName) throws Exception { //check local library first Document moduleDocument = CapoApplication.getDataManager().findDocument(localName, null, PREFERENCE.MODULE_DIR); if (moduleDocument != null) { return moduleDocument.getDocumentElement(); } else if (CapoApplication.isServer() == false) { CapoConnection capoConnection = new CapoConnection(); ModuleRequest moduleRequest = new ModuleRequest(capoConnection, localName); moduleRequest.init(); moduleRequest.send(); Element responseElement = moduleRequest.readResponse().getDocumentElement(); if (responseElement != null && responseElement.hasAttribute(Attributes.ERROR.toString()) == false && responseElement.getLocalName().equals("request") == false) { return responseElement; } else { CapoApplication.logger.log(Level.WARNING, "Error trying to find remote module: "+responseElement.getAttribute(Attributes.ERROR.toString())); } } return null; } }