1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.portal.portlets.admin;
18
19
20 import org.apache.ecs.html.B;
21 import org.apache.ecs.html.Form;
22 import org.apache.ecs.html.Input;
23 import org.apache.ecs.html.P;
24 import org.apache.ecs.html.Table;
25 import org.apache.ecs.html.TD;
26 import org.apache.ecs.html.TH;
27 import org.apache.ecs.html.TR;
28 import org.apache.ecs.ConcreteElement;
29 import org.apache.ecs.ElementContainer;
30 import org.apache.ecs.StringElement;
31
32
33 import org.apache.jetspeed.portal.portlets.AbstractPortlet;
34 import org.apache.jetspeed.portal.PortletException;
35 import org.apache.jetspeed.daemon.Daemon;
36 import org.apache.jetspeed.daemon.DaemonEntry;
37 import org.apache.jetspeed.daemon.DaemonNotFoundException;
38 import org.apache.jetspeed.daemon.impl.FeedDaemon;
39 import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
40 import org.apache.jetspeed.services.logging.JetspeedLogger;
41 import org.apache.jetspeed.services.daemonfactory.DaemonFactory;
42
43
44 import org.apache.turbine.util.ParameterParser;
45 import org.apache.turbine.util.RunData;
46
47
48 import java.util.*;
49
50 /***
51 Handles enumerating Portlets that are also applications
52
53 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
54 @author <a href="mailto:raphael@apache.org">Raphael Luta</a>
55 @author <a href="mailto:sgala@apache.org">Santiago Gala</a>
56 @version $Id: DaemonAdminPortlet.java,v 1.30 2004/02/23 03:26:19 jford Exp $
57 */
58 public class DaemonAdminPortlet extends AbstractPortlet
59 {
60
61 /***
62 * Static initialization of the logger for this class
63 */
64 private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(DaemonAdminPortlet.class.getName());
65
66 public static final String REFRESH = "Start";
67
68 /***
69 Key for starting daemon manually from a form
70 */
71 private static final String DAEMON = "daemon";
72
73
74 public ConcreteElement getContent( RunData rundata ) {
75
76 try {
77
78 if ( rundata.getParameters().getString( REFRESH ) != null ) {
79
80 String daemon = rundata.getParameters().getString( DAEMON );
81
82 try {
83 rundata.getParameters().remove( REFRESH );
84 rundata.getParameters().remove( DAEMON );
85
86 DaemonEntry entry = DaemonFactory.getDaemonEntry( daemon );
87
88
89 logger.info( "Admin -> asking " + daemon + " to run..." );
90
91 DaemonFactory.process( entry );
92
93 } catch (DaemonNotFoundException e) {
94 logger.error( "Could not process daemon...", e );
95 }
96 }
97
98
99 Table table = new Table().setWidth("100%");
100
101 table.addElement( new TR().addElement( new TH() )
102 .addElement( new TH("Name") )
103 .addElement( new TH("Status") )
104 .addElement( new TH("Result") )
105 .addElement( new TH("On Startup") )
106 .addElement( new TH("Interval") )
107 .addElement( new TH("Classname") ) );
108
109 DaemonEntry[] entries = DaemonFactory.getDaemonEntries();
110
111 for (int i = 0; i < entries.length; ++i) {
112
113 table.addElement( new TR()
114 .addElement( new TD( this.getForm( entries[i].getName(), rundata ) ) )
115 .addElement( new TD( entries[i].getName() ) )
116 .addElement( new TD( this.getStatus( DaemonFactory.getStatus( entries[i] ) ) ) )
117 .addElement( new TD( this.getResult( DaemonFactory.getResult( entries[i] ) ) ) )
118 .addElement( new TD( new Boolean( entries[i].onStartup() ).toString() ) )
119 .addElement( new TD( Long.toString( entries[i].getInterval() ) ) )
120 .addElement( new TD( entries[i].getClassname() ) ) );
121
122 String message = DaemonFactory.getMessage( entries[i] );
123
124 if ( message != null ) {
125
126 message = entries[i].getName() + ": " + message;
127
128 table.addElement( new TR().addElement( new TD().setColSpan( 7 )
129 .addElement( message ) ) );
130
131 }
132
133 }
134
135 ElementContainer content = new ElementContainer();
136
137
138
139 content.addElement( table );
140
141
142 return content;
143
144 } catch ( Throwable t ) {
145 logger.error("Throwable", t);
146 return new StringElement( t.getMessage() );
147 }
148
149 }
150
151
152 /***
153 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
154 */
155 private String getStatus(int status) {
156
157 String message = "Unknown";
158
159 switch(status) {
160 case Daemon.STATUS_NOT_PROCESSED:
161 message = "Not processed";
162 break;
163
164 case Daemon.STATUS_PROCESSING:
165 message = "Processing...";
166 break;
167 case Daemon.STATUS_PROCESSED:
168 message = "Processed";
169 break;
170
171 }
172
173 return message;
174
175 }
176
177 /***
178 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
179 */
180 private String getResult( int result ) {
181
182 String message = "Unknown";
183
184 switch (result) {
185 case Daemon.RESULT_SUCCESS:
186 message = "Success";
187 break;
188
189 case Daemon.RESULT_FAILED:
190 message = "Failed";
191 break;
192
193 case Daemon.RESULT_PROCESSING:
194 message = "Processing...";
195 break;
196 }
197
198 return message;
199
200 }
201
202
203 /***
204 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
205 */
206 private ConcreteElement getFeedCount() {
207
208 return new P().addElement( new B( "Current number of feeds: ") )
209 .addElement( Integer.toString( FeedDaemon.getCount() ) );
210
211 }
212
213
214 /***
215 Return a form that can refresh the current daemon
216
217 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
218 */
219 private Form getForm( String daemon, RunData rundata ) {
220
221
222 Form form = new Form();
223
224 ParameterParser params = rundata.getParameters();
225 Enumeration keys = params.keys();
226 while( keys.hasMoreElements() ) {
227 String key = (String)keys.nextElement();
228 String value = (String)params.getString(key, "");
229 form.addElement( new Input( ).setName( key )
230 .setType( "hidden" )
231 .setValue( value ) );
232 }
233
234
235
236 form.addElement( new Input().setType( "submit" )
237 .setName( REFRESH )
238 .setValue( REFRESH ) );
239
240 form.addElement( new Input().setType( "hidden" )
241 .setName( DAEMON )
242 .setValue( daemon ) );
243
244 return form;
245 }
246
247
248 /***
249 @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
250 */
251 public void init() throws PortletException {
252
253 this.setTitle("Daemons");
254
255 this.setDescription("Configure your daemon...");
256
257 }
258
259 public boolean getAllowEdit( RunData rundata ) {
260 return false;
261 }
262
263 public boolean getAllowMaximize(RunData rundata ) {
264 return false;
265 }
266
267
268 }