/* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.portal.portlets.admin; //Element Construction Set import org.apache.ecs.html.B; import org.apache.ecs.html.Form; import org.apache.ecs.html.Input; import org.apache.ecs.html.P; import org.apache.ecs.html.Table; import org.apache.ecs.html.TD; import org.apache.ecs.html.TH; import org.apache.ecs.html.TR; import org.apache.ecs.ConcreteElement; import org.apache.ecs.ElementContainer; import org.apache.ecs.StringElement; //Jetspeed stuff import org.apache.jetspeed.portal.portlets.AbstractPortlet; import org.apache.jetspeed.portal.PortletException; import org.apache.jetspeed.daemon.Daemon; import org.apache.jetspeed.daemon.DaemonEntry; import org.apache.jetspeed.daemon.DaemonNotFoundException; import org.apache.jetspeed.daemon.impl.FeedDaemon; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.jetspeed.services.daemonfactory.DaemonFactory; //turbine import org.apache.turbine.util.ParameterParser; import org.apache.turbine.util.RunData; //standard java stuff import java.util.*; /** Handles enumerating Portlets that are also applications @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> @author <a href="mailto:raphael@apache.org">Raphael Luta</a> @author <a href="mailto:sgala@apache.org">Santiago Gala</a> @version $Id: DaemonAdminPortlet.java,v 1.30 2004/02/23 03:26:19 jford Exp $ */ public class DaemonAdminPortlet extends AbstractPortlet { /** * Static initialization of the logger for this class */ private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(DaemonAdminPortlet.class.getName()); public static final String REFRESH = "Start"; /** Key for starting daemon manually from a form */ private static final String DAEMON = "daemon"; public ConcreteElement getContent( RunData rundata ) { try { if ( rundata.getParameters().getString( REFRESH ) != null ) { String daemon = rundata.getParameters().getString( DAEMON ); try { rundata.getParameters().remove( REFRESH ); rundata.getParameters().remove( DAEMON ); DaemonEntry entry = DaemonFactory.getDaemonEntry( daemon ); logger.info( "Admin -> asking " + daemon + " to run..." ); //now that we have the DaemonEntry kick it off for processing DaemonFactory.process( entry ); } catch (DaemonNotFoundException e) { logger.error( "Could not process daemon...", e ); } } Table table = new Table().setWidth("100%"); table.addElement( new TR().addElement( new TH() ) .addElement( new TH("Name") ) .addElement( new TH("Status") ) .addElement( new TH("Result") ) .addElement( new TH("On Startup") ) .addElement( new TH("Interval") ) .addElement( new TH("Classname") ) ); DaemonEntry[] entries = DaemonFactory.getDaemonEntries(); for (int i = 0; i < entries.length; ++i) { table.addElement( new TR() .addElement( new TD( this.getForm( entries[i].getName(), rundata ) ) ) .addElement( new TD( entries[i].getName() ) ) .addElement( new TD( this.getStatus( DaemonFactory.getStatus( entries[i] ) ) ) ) .addElement( new TD( this.getResult( DaemonFactory.getResult( entries[i] ) ) ) ) .addElement( new TD( new Boolean( entries[i].onStartup() ).toString() ) ) .addElement( new TD( Long.toString( entries[i].getInterval() ) ) ) .addElement( new TD( entries[i].getClassname() ) ) ); String message = DaemonFactory.getMessage( entries[i] ); if ( message != null ) { message = entries[i].getName() + ": " + message; table.addElement( new TR().addElement( new TD().setColSpan( 7 ) .addElement( message ) ) ); } } ElementContainer content = new ElementContainer(); //content.addElement( this.getStatus() ); //content.addElement( this.getFeedCount() ); content.addElement( table ); //content.addElement( this.getForm() ); return content; } catch ( Throwable t ) { logger.error("Throwable", t); return new StringElement( t.getMessage() ); } } /** @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> */ private String getStatus(int status) { String message = "Unknown"; switch(status) { case Daemon.STATUS_NOT_PROCESSED: message = "Not processed"; break; case Daemon.STATUS_PROCESSING: message = "Processing..."; break; case Daemon.STATUS_PROCESSED: message = "Processed"; break; } return message; } /** @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> */ private String getResult( int result ) { String message = "Unknown"; switch (result) { case Daemon.RESULT_SUCCESS: message = "Success"; break; case Daemon.RESULT_FAILED: message = "Failed"; break; case Daemon.RESULT_PROCESSING: message = "Processing..."; break; } return message; } /** @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> */ private ConcreteElement getFeedCount() { return new P().addElement( new B( "Current number of feeds: ") ) .addElement( Integer.toString( FeedDaemon.getCount() ) ); } /** Return a form that can refresh the current daemon @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> */ private Form getForm( String daemon, RunData rundata ) { Form form = new Form(); ParameterParser params = rundata.getParameters(); Enumeration keys = params.keys(); while( keys.hasMoreElements() ) { String key = (String)keys.nextElement(); String value = (String)params.getString(key, ""); form.addElement( new Input( ).setName( key ) .setType( "hidden" ) .setValue( value ) ); } form.addElement( new Input().setType( "submit" ) .setName( REFRESH ) .setValue( REFRESH ) ); form.addElement( new Input().setType( "hidden" ) .setName( DAEMON ) .setValue( daemon ) ); return form; } /** @author <a href="mailto:burton@apache.org">Kevin A. Burton</a> */ public void init() throws PortletException { this.setTitle("Daemons"); this.setDescription("Configure your daemon..."); } public boolean getAllowEdit( RunData rundata ) { return false; } public boolean getAllowMaximize(RunData rundata ) { return false; } }