package org.exist.cocoon; import java.util.HashMap; import java.util.Map; import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.cocoon.acting.ServiceableAction; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.SourceResolver; import org.exist.storage.DBBroker; import org.exist.xmldb.DatabaseInstanceManager; import org.xmldb.api.DatabaseManager; import org.xmldb.api.base.Collection; import org.xmldb.api.base.XMLDBException; /** * Cocoon action to shut down a running database instance of eXist. * * @author wolf */ public class ShutdownAction extends ServiceableAction implements ThreadSafe { public ShutdownAction() { super(); } /* (non-Javadoc) * @see org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector, org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters) */ public Map act( Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception { Map result = new HashMap(); Request request = ObjectModelHelper.getRequest( objectModel ); if ( request == null ) { getLogger().error( "No request!" ); return null; } String user = request.getParameter("user"); String passwd = request.getParameter("password"); if(user == null) { getLogger().error("no user specified!"); return null; } if ( source == null ) { getLogger().debug( "No source specified! Using default." ); source = "xmldb:exist://" + DBBroker.ROOT_COLLECTION; } Collection collection = null; // try to access collection specified in source try { collection = DatabaseManager.getCollection( source, user, passwd ); } catch ( XMLDBException e ) { getLogger().error( "login denied: " + e.getMessage() ); return null; } try { DatabaseInstanceManager mgr = (DatabaseInstanceManager) collection.getService("DatabaseInstanceManager", "1.0"); if(mgr == null) { getLogger().error("access to DatabaseInstanceManager failed"); return null; } mgr.shutdown(); } catch (XMLDBException e) { getLogger().warn("An error occurred: " + e.getMessage(), e); return null; } return result; } }