/*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.argeo.slc.jcr.execution;
+import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import org.apache.commons.logging.Log;
import org.argeo.slc.SlcException;
import org.argeo.slc.execution.ExecutionProcess;
import org.argeo.slc.execution.ExecutionStep;
+import org.argeo.slc.execution.RealizedFlow;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
/** Execution process implementation based on a JCR node. */
public class JcrExecutionProcess implements ExecutionProcess, SlcNames {
- private Log log = LogFactory.getLog(JcrExecutionProcess.class);
+ private final static Log log = LogFactory.getLog(JcrExecutionProcess.class);
private final Node node;
private Long nextLogLine = 1l;
this.node = node;
}
- public String getUuid() {
+ public synchronized String getUuid() {
try {
return node.getProperty(SLC_UUID).getString();
} catch (RepositoryException e) {
}
}
- public String getStatus() {
+ public synchronized String getStatus() {
try {
return node.getProperty(SLC_STATUS).getString();
} catch (RepositoryException e) {
}
}
- public void setStatus(String status) {
+ public synchronized void setStatus(String status) {
try {
node.setProperty(SLC_STATUS, status);
// last modified properties needs to be manually updated
String path = node.getPath() + '/' + relPath;
// clean special character
// TODO factorize in JcrUtils
- path = path.replace('@', '_').replace(':', '_');
+ path = path.replace('@', '_');
Node location = JcrUtils.mkdirs(node.getSession(), path);
Node logEntry = location.addNode(Long.toString(nextLogLine),
}
}
- public Node getNode() {
- return node;
+ // public Node getNode() {
+ // return node;
+ // }
+
+ public List<RealizedFlow> getRealizedFlows() {
+ try {
+ List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
+ Node rootRealizedFlowNode = node.getNode(SLC_FLOW);
+ // we just manage one level for the time being
+ NodeIterator nit = rootRealizedFlowNode.getNodes(SLC_FLOW);
+ while (nit.hasNext()) {
+ Node realizedFlowNode = nit.nextNode();
+ RealizedFlow realizedFlow = new JcrRealizedFlow(
+ realizedFlowNode);
+ if (realizedFlow != null)
+ realizedFlows.add(realizedFlow);
+ }
+ return realizedFlows;
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot get realized flows", e);
+ }
+ }
+
+ public String getNodePath() {
+ try {
+ return node.getPath();
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot get process node path for " + node,
+ e);
+ }
}
+ public Repository getRepository() {
+ try {
+ return node.getSession().getRepository();
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot get process JCR repository for "
+ + node, e);
+ }
+ }
}