dflorey 2004/06/10 09:14:12
Modified:
proposals/projector/src/java/org/apache/slide/projector/processor/security
Login.java
proposals/projector/src/java/org/apache/slide/projector
SystemContext.java Constants.java Context.java
proposals/projector/src/java/org/apache/slide/projector/connector/webdav
WebdavConnector.java
proposals/projector/src/java/org/apache/slide/projector/processor/core
CachedContent.java Thread.java
proposals/projector/src/java/org/apache/slide/projector/application
ApplicationManager.java
proposals/projector/src/java/org/apache/slide/projector/processor/form
FormHandler.java Trigger.java
proposals/projector/src/java/org/apache/slide/projector/engine
Scheduler.java Job.java
proposals/projector/src/java/org/apache/slide/projector/connector
Connector.java
Added:
proposals/projector/src/java/org/apache/slide/projector/processor/security
Authenticated.java Logout.java
Removed: proposals/projector/src/java/org/apache/slide/projector/engine
JobDefinition.java
Log:
Started to work on admin demo application
Revision Changes Path
1.3 +11 -13
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/Login.java
Index: Login.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/Login.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Login.java 1 Jun 2004 07:49:58 -0000 1.2
+++ Login.java 10 Jun 2004 16:14:12 -0000 1.3
@@ -1,12 +1,13 @@
package org.apache.slide.projector.processor.security;
+import org.apache.commons.httpclient.Credentials;
+import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.descriptor.*;
import org.apache.slide.projector.i18n.DefaultMessage;
import org.apache.slide.projector.i18n.ErrorMessage;
import org.apache.slide.projector.i18n.ParameterMessage;
import org.apache.slide.projector.Information;
import org.apache.slide.projector.*;
-import org.apache.slide.projector.value.StringValue;
import java.util.Map;
@@ -18,8 +19,7 @@
public class Login implements Processor {
private final static String USERNAME = "username";
private final static String PASSWORD = "password";
- private final static String INTERESTS = "interests";
-
+
private final static String LOGIN_OK = "loginOk";
private final static String LOGIN_FAILED = "loginFailed";
public final static String ERRORS = "errors";
@@ -27,21 +27,19 @@
public Result process(Map parameter, Context context) throws Exception {
String username = parameter.get(USERNAME).toString();
String password = parameter.get(PASSWORD).toString();
- if ( username.equals("Daniel") && password.equals("test") ) {
- return new Result(LOGIN_OK);
- }
- context.addInformation(new Information(Information.ERROR, new
ErrorMessage("login/invalidLogin"), new String[] { USERNAME, PASSWORD }));
- if ( password.equals("aaaa") ) {
- context.addInformation(new Information(Information.ERROR, new
ErrorMessage("login/invalidPassword"), new String[] { PASSWORD }));
+ Credentials credentials = ConnectorFactory.getConnector().login(username,
password);
+ if ( credentials == null ) {
+ context.addInformation(new Information(Information.ERROR, new
ErrorMessage("login/invalidLogin"), new String[] { USERNAME, PASSWORD }));
+ return new Result(LOGIN_FAILED);
}
- return new Result(LOGIN_FAILED);
+ context.setCredentials(credentials);
+ return new Result(LOGIN_OK);
}
public ParameterDescriptor[] getParameterDescriptors() {
return new ParameterDescriptor[] {
- new ParameterDescriptor(USERNAME, new ParameterMessage("login/user"),
new StringValueDescriptor(), new StringValue("Daniel")),
+ new ParameterDescriptor(USERNAME, new ParameterMessage("login/user"),
new StringValueDescriptor(1,20)),
new ParameterDescriptor(PASSWORD, new
ParameterMessage("login/password"), new StringValueDescriptor(4,12)),
- new ParameterDescriptor(INTERESTS, new
ParameterMessage("person/interests"), new ArrayValueDescriptor(new
StringValueDescriptor(new String[] { "sport", "musik", "fernsehen", "tanzen",
"springen", "schreien"})))
};
}
1.1
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/Authenticated.java
Index: Authenticated.java
===================================================================
package org.apache.slide.projector.processor.security;
import org.apache.slide.projector.descriptor.*;
import org.apache.slide.projector.i18n.DefaultMessage;
import org.apache.slide.projector.*;
import java.util.Map;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
* @version $Revision: 1.1 $
*/
public class Authenticated implements Processor {
private final static String TRUE = "true";
private final static String FALSE = "false";
private final static ParameterDescriptor[] parameterDescriptors = new
ParameterDescriptor[0];
private final static ResultDescriptor resultDescirptor = new
ResultDescriptor(new StateDescriptor[] {
new StateDescriptor(TRUE, new
DefaultMessage("authenticated/state/true")),
new StateDescriptor(FALSE, new
DefaultMessage("authenticated/state/false"))
});
public Result process(Map parameter, Context context) throws Exception {
if ( context.getCredentials() == Constants.CREDENTIALS ) {
return new Result(FALSE);
}
return new Result(TRUE);
}
public ParameterDescriptor[] getParameterDescriptors() {
return parameterDescriptors;
}
public ResultDescriptor getResultDescriptor() {
return resultDescirptor;
}
}
1.1
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/Logout.java
Index: Logout.java
===================================================================
package org.apache.slide.projector.processor.security;
import org.apache.slide.projector.descriptor.*;
import org.apache.slide.projector.*;
import java.util.Map;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
* @version $Revision: 1.1 $
*/
public class Logout implements Processor {
private final static ParameterDescriptor[] parameterDescriptors = new
ParameterDescriptor[0];
private final static ResultDescriptor resultDescirptor = new
ResultDescriptor(new StateDescriptor[] {
StateDescriptor.OK_DESCRIPTOR
});
public Result process(Map parameter, Context context) throws Exception {
context.setCredentials(Constants.CREDENTIALS);
return Result.OK;
}
public ParameterDescriptor[] getParameterDescriptors() {
return parameterDescriptors;
}
public ResultDescriptor getResultDescriptor() {
return resultDescirptor;
}
}
1.3 +6 -1
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/SystemContext.java
Index: SystemContext.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/SystemContext.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SystemContext.java 3 Jun 2004 14:53:14 -0000 1.2
+++ SystemContext.java 10 Jun 2004 16:14:12 -0000 1.3
@@ -10,6 +10,7 @@
public class SystemContext extends AbstractContext {
protected final static String BOOKMARK = "_bookmark_";
+ private Credentials credentials = Constants.CREDENTIALS;
private Cache contextStore = new Cache();
private RepositoryStore repositoryStore = new RepositoryStore(this);
private ProcessStore transientProcessStore = new
ProcessStore(Cache.getInstance());
@@ -36,8 +37,12 @@
return null;
}
+ public void setCredentials(Credentials credentials) {
+ this.credentials = credentials;
+ }
+
public Credentials getCredentials() {
- return Constants.CREDENTIALS;
+ return credentials;
}
public void setProcessId(String processId) {
1.12 +4 -5
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java
Index: Constants.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- Constants.java 8 Jun 2004 14:43:15 -0000 1.11
+++ Constants.java 10 Jun 2004 16:14:12 -0000 1.12
@@ -12,7 +12,7 @@
public final static String REPOSITORY_DOMAIN = "/slide";
public final static String REPOSITORY_HOST = "localhost";
- public final static int REPOSITORY_PORT = 8080;
+ public final static int REPOSITORY_PORT = 9080;
public final static String REPOSITORY_USER = "root";
public final static String REPOSITORY_PASSWORD = "root";
public final static Protocol REPOSITORY_PROTOCOL = Protocol.getProtocol("http");
@@ -38,15 +38,14 @@
public final static int NOTIFICATION_METHOD = UDP;
public final static String NOTIFICATION_HOST = "192.168.105.64";
- public final static int NOTIFICATION_PORT = 4444;
+ public final static int NOTIFICATION_PORT = 4445;
public final static int POLL_INTERVAL = 60000000; // milliseconds
public final static int SUBSCRIPTION_LIFETIME = 3600;
public final static int NOTIFICATION_DELAY = 0;
- public final static String DOMAIN = REPOSITORY_DOMAIN+"/files/";
-
- public final static String PROJECTOR_DIR = DOMAIN + "projector/";
+ public final static String DOMAIN = "/files/";
+ public final static String PROJECTOR_DIR = DOMAIN+"projector/";
public final static String APPLICATIONS_DIR = PROJECTOR_DIR + "applications/";
public final static String WORK_DIR = PROJECTOR_DIR + "work/";
// FIXME: Use Classpath from applications
1.4 +2 -0
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Context.java
Index: Context.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Context.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Context.java 6 May 2004 12:54:11 -0000 1.3
+++ Context.java 10 Jun 2004 16:14:12 -0000 1.4
@@ -30,6 +30,8 @@
String getStep();
+ void setCredentials(Credentials credentials);
+
Credentials getCredentials();
void addInformation(Information information);
1.10 +15 -0
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java
Index: WebdavConnector.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- WebdavConnector.java 2 Jun 2004 15:35:39 -0000 1.9
+++ WebdavConnector.java 10 Jun 2004 16:14:12 -0000 1.10
@@ -4,6 +4,7 @@
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PutMethod;
@@ -36,6 +37,20 @@
return webdavConnector;
}
+ public Credentials login(String username, String password) throws IOException {
+ String url = Constants.REPOSITORY_DOMAIN+Constants.PROJECTOR_DIR;
+ GetMethod getMethod = new GetMethod(url);
+ getMethod.setDoAuthentication(true);
+ Credentials credentials = new UsernamePasswordCredentials(username,
password);
+ HttpState httpState = new HttpState();
+ httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
+ int state = getMethod.execute(httpState, new
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT,
Constants.REPOSITORY_PROTOCOL));
+ if ( state == HttpStatus.SC_OK ) {
+ return credentials;
+ }
+ return null;
+ }
+
public Value getResource(URI uri, Credentials credentials) throws IOException {
String url = uri.toString();
GetMethod getMethod = new GetMethod(url);
1.3 +4 -3
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java
Index: CachedContent.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CachedContent.java 8 Jun 2004 09:48:24 -0000 1.2
+++ CachedContent.java 10 Jun 2004 16:14:12 -0000 1.3
@@ -3,7 +3,7 @@
import org.apache.slide.projector.*;
import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.descriptor.*;
-import org.apache.slide.projector.engine.JobDefinition;
+import org.apache.slide.projector.engine.Job;
import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.engine.Scheduler;
import org.apache.slide.projector.expression.EventExpression;
@@ -49,7 +49,8 @@
EventExpression expression = new EventExpression("Update");
expression.addProperty(EventExpression.DEPTH, "0");
expression.addProperty(EventExpression.URI, uri.toString());
- Scheduler.getInstance().registerJobDefinition(new
JobDefinition(expression, new URIValue("dispose"), jobParameter, false, false));
+ Scheduler.getInstance().registerJob(new
Job(context.getProcessId()+":"+context.getStep(), new URIValue("dispose"), expression,
expression, jobParameter, false, false));
+ Scheduler.getInstance().saveJobs();
}
resultEntries.put(SimpleProcessor.OUTPUT, output);
// build url to activate this processor on top level
1.3 +23 -5
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Thread.java
Index: Thread.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Thread.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Thread.java 8 Jun 2004 09:48:24 -0000 1.2
+++ Thread.java 10 Jun 2004 16:14:12 -0000 1.3
@@ -33,7 +33,6 @@
import org.apache.slide.projector.descriptor.URIValueDescriptor;
import org.apache.slide.projector.descriptor.XMLValueDescriptor;
import org.apache.slide.projector.engine.Job;
-import org.apache.slide.projector.engine.JobDefinition;
import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.engine.Scheduler;
import org.apache.slide.projector.expression.Expression;
@@ -42,7 +41,9 @@
import org.apache.slide.projector.util.ProcessorHelper;
import org.apache.slide.projector.value.BooleanValue;
import org.apache.slide.projector.value.MapValue;
+import org.apache.slide.projector.value.NullValue;
import org.apache.slide.projector.value.URIValue;
+import org.apache.slide.projector.value.Value;
import org.apache.slide.projector.value.XMLValue;
/**
@@ -53,6 +54,7 @@
public final static String PROCESSOR = "processor";
public final static String REPEAT = "repeat";
public final static String CONDITION = "condition";
+ public final static String REMAINING_CONDITION = "remainingCondition";
public final static String PARAMETERS = "parameters";
public final static String PERSISTENT = "persistent";
@@ -61,6 +63,7 @@
new ParameterDescriptor(REPEAT, new
ParameterMessage("job/parameter/repeat"), new BooleanValueDescriptor(),
BooleanValue.FALSE),
new ParameterDescriptor(PERSISTENT, new
ParameterMessage("job/parameter/persistent"), new BooleanValueDescriptor(),
BooleanValue.TRUE),
new ParameterDescriptor(CONDITION, new
ParameterMessage("job/parameter/condition"), new XMLValueDescriptor()),
+ new ParameterDescriptor(REMAINING_CONDITION, new
ParameterMessage("job/parameter/remainingCondition"), new XMLValueDescriptor(),
NullValue.NULL),
new ParameterDescriptor(PARAMETERS, new
ParameterMessage("job/parameter/parameters"), new MapValueDescriptor())
};
@@ -71,14 +74,29 @@
public Result process(Map parameters, Context context) throws Exception {
Map jobParameters =
((MapValue)parameters.get(PARAMETERS)).getMap();
URI jobUri = (URIValue)parameters.get(PROCESSOR);
- XMLValue condition = (XMLValue)parameters.get(CONDITION);
+ XMLValue initialCondition =
(XMLValue)parameters.get(CONDITION);
boolean repeatJob =
((BooleanValue)parameters.get(REPEAT)).booleanValue();
+ Value remainingConditionValue =
(Value)parameters.get(REMAINING_CONDITION);
+ XMLValue remainingCondition = null;
+ if ( remainingConditionValue == NullValue.NULL ) {
+ remainingCondition = initialCondition;
+ } else {
+ remainingCondition = (XMLValue)remainingConditionValue;
+ }
boolean persistentJob =
((BooleanValue)parameters.get(PERSISTENT)).booleanValue();
- Expression expression =
ExpressionFactory.create(condition.getRootElement());
+ Expression remainingExpression =
ExpressionFactory.create(remainingCondition.getRootElement());
+ Expression initialExpression =
ExpressionFactory.create(initialCondition.getRootElement());
Processor jobProcessor =
ProcessorManager.getInstance().getProcessor(jobUri);
ProcessorHelper.validate(jobProcessor.getParameterDescriptors(), jobParameters,
context);
- JobDefinition jobDefinition = new JobDefinition(expression,
jobUri, jobParameters, repeatJob, persistentJob);
- Scheduler.getInstance().registerJobDefinition(jobDefinition);
+ String processorId = context.getProcessId();
+ Job job;
+ if ( processorId == null ) {
+ job = new Job(context.getStep(), jobUri,
initialExpression, remainingExpression, jobParameters, repeatJob, persistentJob);
+ } else {
+ job = new
Job(context.getProcessId()+":"+context.getStep(), jobUri, initialExpression,
remainingExpression, jobParameters, repeatJob, persistentJob);
+ }
+ Scheduler.getInstance().registerJob(job);
+ Scheduler.getInstance().saveJobs();
return Result.OK;
}
1.8 +31 -24
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/application/ApplicationManager.java
Index: ApplicationManager.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/application/ApplicationManager.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ApplicationManager.java 8 Jun 2004 14:43:16 -0000 1.7
+++ ApplicationManager.java 10 Jun 2004 16:14:12 -0000 1.8
@@ -42,14 +42,14 @@
private ApplicationManager() {
logger.log(Level.INFO, "Starting projector...");
- ConnectorFactory.getConnector().subscribe("Update/newmember", new
URIValue(Constants.APPLICATIONS_DIR), 1, Constants.SUBSCRIPTION_LIFETIME,
Constants.NOTIFICATION_DELAY,
+ ConnectorFactory.getConnector().subscribe("Update/newmember", new
URIValue(Constants.REPOSITORY_DOMAIN+Constants.APPLICATIONS_DIR), 1,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
new Subscriber() {
public void notify(URI uri, Map information) {
logger.log(Level.INFO, "Package manager received add event");
applicationManager.installApplications();
}
}, context.getCredentials());
- ConnectorFactory.getConnector().subscribe("Delete", new
URIValue(Constants.APPLICATIONS_DIR), 1, Constants.SUBSCRIPTION_LIFETIME,
Constants.NOTIFICATION_DELAY,
+ ConnectorFactory.getConnector().subscribe("Delete", new
URIValue(Constants.REPOSITORY_DOMAIN+Constants.APPLICATIONS_DIR), 1,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
new Subscriber() {
public void notify(URI uri, Map information) {
logger.log(Level.INFO, "Package manager received delete
event");
@@ -58,8 +58,8 @@
}, context.getCredentials());
applicationListeners.add(ProcessorManager.getInstance());
applicationListeners.add(MessageManager.getInstance());
+ applicationListeners.add(Scheduler.getInstance());
installApplications();
- Scheduler.getInstance().install(new URIValue(Constants.WORK_DIR +
Scheduler.JOBS), false);
}
private synchronized void installApplications() {
@@ -69,7 +69,7 @@
try {
List removedApplications = new ArrayList();
removedApplications.addAll(installedApplications.keySet());
- applicationUris =
((ArrayValue)ConnectorFactory.getConnector().getChildren(new
URIValue(Constants.APPLICATIONS_DIR), context.getCredentials())).getArray();
+ applicationUris =
((ArrayValue)ConnectorFactory.getConnector().getChildren(new
URIValue(Constants.REPOSITORY_DOMAIN+Constants.APPLICATIONS_DIR),
context.getCredentials())).getArray();
for ( int i = 0; i < applicationUris.length; i++ ) {
String applicationUri = applicationUris[i].toString();
if ( !applicationUri.endsWith("/") ) {
@@ -96,8 +96,21 @@
List sortedApplications = sortApplications(applicationsToInstall);
for ( Iterator i = sortedApplications.iterator(); i.hasNext(); ) {
Application application = (Application)i.next();
- install(application);
+ ConnectorFactory.getConnector().subscribe("Update", new
URIValue(Constants.REPOSITORY_DOMAIN+application.getUri().toString()), 0,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
+ new Subscriber() {
+ public void notify(URI uri, Map information) {
+ applicationManager.updateApplication(new
URIValue(uri.toString().substring(Constants.REPOSITORY_DOMAIN.length()+1)));
+ }
+ }, context.getCredentials());
+ install(Application.MESSAGES, application);
+ install(Application.PROCESSORS, application);
}
+ Scheduler.getInstance().install(new URIValue(Constants.WORK_DIR +
Scheduler.JOBS), true);
+ for ( Iterator i = sortedApplications.iterator(); i.hasNext(); ) {
+ Application application = (Application)i.next();
+ install(Application.JOBS, application);
+ }
+ Scheduler.getInstance().saveJobs();
} catch (IOException e) {
logger.log(Level.SEVERE, "Could not determine installed
applications!", e);
}
@@ -224,28 +237,22 @@
}
}
- private void install(Application application) {
- logger.log(Level.INFO, "Installing application '"+application.getUri()+"'");
- ConnectorFactory.getConnector().subscribe("Update", new
URIValue(Constants.REPOSITORY_DOMAIN+application.getUri().toString()), 0,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
- new Subscriber() {
- public void notify(URI uri, Map information) {
- applicationManager.updateApplication(new
URIValue(uri.toString().substring(Constants.REPOSITORY_DOMAIN.length()+1)));
+ private void install(String type, Application application) {
+ logger.log(Level.INFO, "Installing "+type+" of application
'"+application.getUri()+"'");
+ List contents = (List)application.getContent().get(type);
+ if ( contents != null ) {
+ for ( Iterator j = contents.iterator(); j.hasNext(); ) {
+ URI uri = (URI)j.next();
+ for ( Iterator k = applicationListeners.iterator();
k.hasNext(); ) {
+ ((ApplicationListener)k.next()).install(type,
application.getUri(), uri);
+ }
}
- }, context.getCredentials());
- for ( Iterator i = application.getContent().entrySet().iterator();
i.hasNext(); ) {
- Map.Entry entry = (Map.Entry)i.next();
- for ( Iterator j = ((List)entry.getValue()).iterator();
j.hasNext(); ) {
- URI uri = (URI)j.next();
- for ( Iterator k = applicationListeners.iterator();
k.hasNext(); ) {
-
((ApplicationListener)k.next()).install((String)entry.getKey(), application.getUri(),
uri);
- }
- }
- }
- installedApplications.put(application.getUri(), application);
+ }
+ installedApplications.put(application.getUri(), application);
}
- private void uninstall(Application application) {
- logger.log(Level.INFO, "Uninstall application '"+application.getUri()+"'");
+ private void uninstall(String type, Application application) {
+ logger.log(Level.INFO, "Uninstall "+type+" of application
'"+application.getUri()+"'");
for ( Iterator i = application.getContent().entrySet().iterator();
i.hasNext(); ) {
Map.Entry entry = (Map.Entry)i.next();
for ( Iterator j = ((List)entry.getValue()).iterator();
j.hasNext(); ) {
1.12 +7 -4
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java
Index: FormHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- FormHandler.java 8 Jun 2004 09:04:05 -0000 1.11
+++ FormHandler.java 10 Jun 2004 16:14:12 -0000 1.12
@@ -56,6 +56,7 @@
StringTokenizer tokenizer = new
StringTokenizer(StringValueDescriptor.toString(parameter.get(INSTRUCTION_IDENTIFIER+trigger)),
";");
URI actionURI = new URIValue(tokenizer.nextToken());
boolean validate =
Boolean.valueOf(tokenizer.nextToken()).booleanValue();
+ boolean wizard = Boolean.valueOf(tokenizer.nextToken()).booleanValue();
String lastStep = tokenizer.nextToken();
String targetStep = tokenizer.nextToken();
URI bookmarkUri = new URIValue(tokenizer.nextToken());
@@ -90,9 +91,11 @@
map.put(parameterName,
ProcessorHelper.validate(parameterDescriptors[i], parameter.get(parameterName),
context));
}
}
- // Don't validate target step form
- map.put(ControlComposer.VALIDATE, BooleanValue.FALSE);
- } catch ( ValidationException exception ) {
+ if ( wizard ) {
+ // Don't validate target step form
+ map.put(ControlComposer.VALIDATE, BooleanValue.FALSE);
+ }
+ } catch ( ValidationException exception ) {
// 3. Go back to form step if validation failes
map.put(Process.STEP, new StringValue(lastStep));
}
1.10 +7 -3
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java
Index: Trigger.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Trigger.java 8 Jun 2004 09:04:05 -0000 1.9
+++ Trigger.java 10 Jun 2004 16:14:12 -0000 1.10
@@ -30,6 +30,7 @@
public final static String INSTRUCTION = "instruction";
public final static String ACTION = "action";
public final static String VALIDATE = "validate";
+ public final static String WIZARD = "wizard";
public final static String BOOKMARK = "bookmark";
public final static String INVOLVED_PARAMETERS = "involved-parameters";
public final char SEPARATOR = ';';
@@ -48,9 +49,10 @@
StringValue []involvedParameters =
(StringValue[])((ArrayValue)parameter.get(INVOLVED_PARAMETERS)).getArray();
String targetStep = parameter.get(Process.STEP).toString();
BooleanValue validate = (BooleanValue)parameter.get(VALIDATE);
+ BooleanValue wizard = (BooleanValue)parameter.get(WIZARD);
URI actionUri = (URI)parameter.get(ACTION);
StringBuffer buffer = new StringBuffer(128);
-
buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(bookmark).append(SEPARATOR).append(context.getProcess());
+
buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(wizard).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(bookmark).append(SEPARATOR).append(context.getProcess());
if ( validate.booleanValue() ) {
for ( int i = 0; i < involvedParameters.length; i++ ) {
buffer.append(SEPARATOR).append(involvedParameters[i]);
@@ -64,7 +66,7 @@
public void configure(StreamableValue config) throws ConfigurationException {
super.configure(config);
ParameterDescriptor[] parentParameterDescriptors =
super.getParameterDescriptors();
- parameterDescriptors = new
ParameterDescriptor[parentParameterDescriptors.length + 4];
+ parameterDescriptors = new
ParameterDescriptor[parentParameterDescriptors.length + 5];
int counter = 0;
for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
@@ -82,6 +84,8 @@
new ParameterDescriptor(BOOKMARK, new
ParameterMessage("trigger/bookmark"), new URIValueDescriptor(), NullValue.NULL );
parameterDescriptors[parentParameterDescriptors.length + 3] =
new ParameterDescriptor(INVOLVED_PARAMETERS, new
ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new
StringValueDescriptor()));
+ parameterDescriptors[parentParameterDescriptors.length + 4] =
+ new ParameterDescriptor(WIZARD, new ParameterMessage("trigger/wizard"),
new BooleanValueDescriptor(), BooleanValue.FALSE);
}
public ParameterDescriptor[] getParameterDescriptors() {
1.10 +44 -55
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java
Index: Scheduler.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Scheduler.java 8 Jun 2004 14:43:15 -0000 1.9
+++ Scheduler.java 10 Jun 2004 16:14:12 -0000 1.10
@@ -22,12 +22,14 @@
import java.util.logging.Level;
import java.util.logging.Logger;
-public class Scheduler {
+public class Scheduler implements ApplicationListener {
private final static Logger logger =
Logger.getLogger(Scheduler.class.getName());
public final static String JOBS = "jobs.xml";
public final static String JOB_DEFINITIONS = "jobDefinitions.xml";
+ private final static String STARTUP_IDENTIFIER = "startup:";
+
private final Context context = new SystemContext();
private static Scheduler scheduler = new Scheduler();
@@ -35,7 +37,8 @@
private static Timer timer = new Timer();
private List jobs = new ArrayList();
- private List jobDefinitions = new ArrayList();
+ private List restoredJobs = new ArrayList();
+ private List installedJobNames = new ArrayList();
private Map installedJobs = new HashMap();
@@ -46,57 +49,72 @@
return scheduler;
}
- public void install(String type, URI configurationUri) {
+ public void install(String type, URI applicationUri, URI configurationUri) {
if ( type == Application.JOBS ) {
- install(configurationUri, true);
+ install(configurationUri, false);
}
}
- public void uninstall(String type, URI configurationUri) {
+ public void uninstall(String type, URI applicationUri, URI configurationUri) {
if ( type == Application.JOBS ) {
uninstall(configurationUri);
}
}
- public void update(String type, URI configurationUri) {
+ public void update(String type, URI applicationUri, URI configurationUri) {
if ( type == Application.JOBS ) {
update(configurationUri);
}
}
- public void install(URI jobsUri, boolean listen) {
+ public void install(URI jobsUri, boolean restoreRunningJobs) {
logger.log(Level.INFO, "Installing scheduled jobs of application
'"+jobsUri+"'");
try {
- Map applicationJobs = new HashMap();
- StreamableValue jobsResource =
(StreamableValue)ConnectorFactory.getConnector().getResource(jobsUri,
Constants.CREDENTIALS);
+ List applicationJobs = new ArrayList();
+ StreamableValue jobsResource =
(StreamableValue)ConnectorFactory.getConnector().getResource(new
URIValue(Constants.REPOSITORY_DOMAIN+jobsUri), Constants.CREDENTIALS);
+ // FIXME: Beautify the code...
if ( jobsResource != null ) {
DocumentValue documentResource = new
DocumentValue(jobsResource);
Document document = documentResource.getDocument();
Element rootElement = document.getRootElement();
List jobElements =
XPath.newInstance("/jobs/job").selectNodes(rootElement);
+ List configuredJobs = new ArrayList();
for ( Iterator i = jobElements.iterator(); i.hasNext(); ) {
Element jobElement = (Element)i.next();
Step job = new Step();
job.configure(jobElement);
+ if (
!installedJobNames.contains(STARTUP_IDENTIFIER+job.getName()) ) {
+ configuredJobs.add(job);
+ installedJobNames.add(job.getName());
+ }
+ }
+ // Note: starting jobs after reading all, to avoid writing to
configuration files while reading...
+ for ( Iterator i = configuredJobs.iterator(); i.hasNext(); ) {
+ Step job = (Step)i.next();
+ if ( job.getName().startsWith(STARTUP_IDENTIFIER) ) {
+ context.setStep(job.getName());
+ } else {
+
context.setStep(STARTUP_IDENTIFIER+job.getName());
+ }
Processor processor =
ProcessorManager.getInstance().getProcessor(job.getProcessorURI());
Map processorParameters = Process.loadParameters(job,
processor, new HashMap(), null, context);
ProcessorHelper.validate(processor.getParameterDescriptors(), processorParameters,
context);
processor.process(processorParameters, context);
- }
- if ( listen ) {
- ConnectorFactory.getConnector().subscribe("Update",
jobsUri,
- 0, Constants.SUBSCRIPTION_LIFETIME,
Constants.NOTIFICATION_DELAY,
- new Subscriber() {
- public void notify(URI uri, Map information) {
- update(uri);
- }
- }, Constants.CREDENTIALS);
+ if ( !restoreRunningJobs ) {
+
ConnectorFactory.getConnector().subscribe("Update", new
URIValue(Constants.REPOSITORY_DOMAIN+jobsUri),
+ 0,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
+ new Subscriber() {
+ public void notify(URI uri, Map
information) {
+ update(uri);
+ }
+ }, Constants.CREDENTIALS);
+ }
}
} else {
logger.log(Level.INFO, "Configured jobs resource '"+jobsUri+"'
not found!");
}
- jobs.addAll(applicationJobs.values());
- installedJobs.put(jobsUri, applicationJobs.keySet());
+ // FIXME: How to handle deinstallation of running jobs belonging to an
application
+ installedJobs.put(jobsUri, applicationJobs);
} catch (Exception exception) {
logger.log(Level.SEVERE, "Error while parsing messages", exception);
}
@@ -126,11 +144,12 @@
}
public void notify(final Job job) {
- if ( job.getExpression().evaluate() ) {
+ if ( job.getRemainingCondition().evaluate() ) {
job.launch();
jobs.remove(job);
if ( job.repeat() ) {
- activateJob(new Job(job.getDefinition()));
+ job.restart();
+ registerJob(job);
}
}
if ( job.isPersistent() ) {
@@ -138,20 +157,10 @@
}
}
- public void registerJobDefinition(JobDefinition jobDefinition) {
- if ( jobDefinition.isPersistent() ) {
- jobDefinitions.add(jobDefinition);
- saveJobDefinitions();
- }
- activateJob(new Job(jobDefinition));
- }
-
- public void activateJob(Job job) {
+ public void registerJob(Job job) {
synchronized ( jobs ) {
jobs.add(job);
- }
- if ( job.isPersistent() ) {
- saveJobs();
+ job.activate();
}
}
@@ -180,27 +189,7 @@
}
writer.writeEndTag(XMLWriter.createEndTag("jobs"));
try {
- ConnectorFactory.getConnector().setResource(new
URIValue(Constants.WORK_DIR + JOBS), new StringValue(writer.toString()),
Constants.CREDENTIALS);
- } catch (IOException exception) {
- logger.log(Level.SEVERE, "Exception occured while writing jobs to
repository", exception);
- }
- }
-
- public void saveJobDefinitions() {
- XMLStringWriter writer = XMLStringWriter.create();
- writer.writeXMLDeclaration();
- writer.writeStartTag(XMLWriter.createStartTag("job-definitions"));
- synchronized ( jobs ) {
- for ( Iterator i = jobDefinitions.iterator(); i.hasNext(); ) {
- JobDefinition jobDefinition = (JobDefinition)i.next();
- if (jobDefinition.isPersistent()) {
- jobDefinition.save(writer);
- }
- }
- }
- writer.writeEndTag(XMLWriter.createEndTag("job-definitions"));
- try {
- ConnectorFactory.getConnector().setResource(new
URIValue(Constants.WORK_DIR + JOB_DEFINITIONS), new StringValue(writer.toString()),
Constants.CREDENTIALS);
+ ConnectorFactory.getConnector().setResource(new
URIValue(Constants.REPOSITORY_DOMAIN+Constants.WORK_DIR + JOBS), new
StringValue(writer.toString()), Constants.CREDENTIALS);
} catch (IOException exception) {
logger.log(Level.SEVERE, "Exception occured while writing jobs to
repository", exception);
}
1.4 +109 -13
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Job.java
Index: Job.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Job.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Job.java 8 Jun 2004 14:43:15 -0000 1.3
+++ Job.java 10 Jun 2004 16:14:12 -0000 1.4
@@ -19,40 +19,136 @@
*/
package org.apache.slide.projector.engine;
-import java.util.HashMap;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.Processor;
import org.apache.slide.projector.SystemContext;
+import org.apache.slide.projector.URI;
+import org.apache.slide.projector.expression.Expression;
+import org.apache.slide.projector.value.Value;
-public class Job extends JobDefinition implements Runnable {
+import de.zeigermann.xml.XMLStringWriter;
+import de.zeigermann.xml.XMLWriter;
+
+public class Job implements Runnable {
private final static Logger logger = Logger.getLogger(Job.class.getName());
- private JobDefinition definition;
+ protected Expression initialCondition, remainingCondition;
+ protected Map parameters;
+ private URI processorUri;
+ private boolean repeat, persistent;
+ private String id;
- public Job(JobDefinition definition) {
- super(definition.getExpression(), definition.getProcessorUri(), new HashMap(),
definition.repeat(), definition.isPersistent());
- this.definition = definition;
- this.expression = getExpression().activate(this);
- this.parameter.putAll(definition.getParameter());
+ public Job(String id, URI processorUri, Expression initalCondition, Expression
remainingCondition, Map parameters, boolean repeat, boolean persistent) {
+ this.id = id;
+ this.initialCondition = initalCondition;
+ this.remainingCondition = remainingCondition;
+ this.parameters = parameters;
+ this.processorUri = processorUri;
+ this.repeat = repeat;
+ this.persistent = persistent;
}
- public JobDefinition getDefinition() {
- return definition;
- }
-
public void run() {
try {
Processor processor =
ProcessorManager.getInstance().getProcessor(getProcessorUri());
logger.log(Level.INFO, "Launching scheduled process
'"+getProcessorUri()+"'");
Context context = new SystemContext();
Scheduler.setContext(context);
- processor.process(getParameter(), context);
+ processor.process(getParameters(), context);
} catch ( Exception e ) {
logger.log(Level.SEVERE, "Scheduled process '"+getProcessorUri()+"'
failed", e);
}
+ }
+
+ public Expression getInitialCondition() {
+ return initialCondition;
+ }
+
+ public Expression getRemainingCondition() {
+ return remainingCondition;
+ }
+
+ public URI getProcessorUri() {
+ return processorUri;
+ }
+
+ public Map getParameters() {
+ return parameters;
+ }
+
+ public boolean repeat() {
+ return repeat;
+ }
+
+ public boolean isPersistent() {
+ return persistent;
+ }
+
+ public void restart() {
+ remainingCondition = initialCondition;
+ }
+
+ public void activate() {
+ remainingCondition = remainingCondition.activate(this);
+ }
+
+ public void save(XMLStringWriter writer) {
+ writer.writeStartTag(XMLWriter.createStartTag("job", new String[] { "id",
"processor" }, new String[] { id, ProcessorManager.THREAD.toString() }));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"parameters"));
+ writer.writeStartTag(XMLWriter.createStartTag("map"));
+ for ( Iterator i = getParameters().entrySet().iterator(); i.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)i.next();
+ String key = (String)entry.getKey();
+ writer.writeStartTag(XMLWriter.createStartTag("entry", new String[][] {
{"key", key } }));
+ ((Value)entry.getValue()).save(writer);
+ writer.writeEndTag(XMLWriter.createEndTag("entry"));
+ }
+ writer.writeEndTag(XMLWriter.createEndTag("map"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"condition"));
+ writer.writeStartTag(XMLWriter.createStartTag("value"));
+ try {
+ writer.write("<![CDATA[");
+ getInitialCondition().save(writer);
+ writer.write("]]>");
+ } catch ( IOException exception ) {
+ // ignore
+ }
+ writer.writeEndTag(XMLWriter.createEndTag("value"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"remainingCondition"));
+ writer.writeStartTag(XMLWriter.createStartTag("value"));
+ try {
+ writer.write("<![CDATA[");
+ getRemainingCondition().save(writer);
+ writer.write("]]>");
+ } catch ( IOException exception ) {
+ // ignore
+ }
+ writer.writeEndTag(XMLWriter.createEndTag("value"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"repeat"));
+ writer.writeStartTag(XMLWriter.createStartTag("value"));
+ writer.writeCData(String.valueOf(repeat));
+ writer.writeEndTag(XMLWriter.createEndTag("value"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"persistent"));
+ writer.writeStartTag(XMLWriter.createStartTag("value"));
+ writer.writeCData(String.valueOf(persistent));
+ writer.writeEndTag(XMLWriter.createEndTag("value"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeStartTag(XMLWriter.createStartTag("load", "parameter",
"processor"));
+ writer.writeStartTag(XMLWriter.createStartTag("value"));
+ writer.writeCData(getProcessorUri().toString());
+ writer.writeEndTag(XMLWriter.createEndTag("value"));
+ writer.writeEndTag(XMLWriter.createEndTag("load"));
+ writer.writeEndTag(XMLWriter.createEndTag("job"));
}
public void launch() {
1.6 +3 -1
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java
Index: Connector.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Connector.java 1 Jun 2004 07:49:58 -0000 1.5
+++ Connector.java 10 Jun 2004 16:14:12 -0000 1.6
@@ -15,7 +15,9 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
*/
public interface Connector {
- public Value getResource(URI uri, Credentials credentials) throws IOException;
+ public Credentials login(String user, String password) throws IOException;
+
+ public Value getResource(URI uri, Credentials credentials) throws IOException;
public ArrayValue getProperties(URI uri, Credentials credentials) throws
IOException;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]