X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2Fexecution%2FJcrProcessThread.java;h=e28c727501a95a91ad74c66c92105e1589a93f34;hb=f86db0937b395c7fa96fa4bf4a29cc2c676fe3f5;hp=ce9aa1da391f9cd425f9540be0d43714dc57ce88;hpb=94f8c90b4eb50398388b6ee2ebb4e19c8abdee01;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java index ce9aa1da3..e28c72750 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java @@ -1,3 +1,19 @@ +/* + + * 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. + * 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.argeo.slc.jcr.execution; import java.util.HashMap; @@ -7,21 +23,24 @@ import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.Property; import javax.jcr.RepositoryException; +import javax.jcr.Session; import org.argeo.ArgeoException; +import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.DefaultExecutionSpec; import org.argeo.slc.core.execution.PrimitiveSpecAttribute; import org.argeo.slc.core.execution.PrimitiveUtils; import org.argeo.slc.core.execution.ProcessThread; +import org.argeo.slc.core.execution.RefSpecAttribute; import org.argeo.slc.execution.ExecutionFlowDescriptor; import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.execution.ExecutionProcess; import org.argeo.slc.execution.ExecutionSpecAttribute; +import org.argeo.slc.execution.RealizedFlow; import org.argeo.slc.jcr.SlcJcrUtils; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; -import org.argeo.slc.process.RealizedFlow; /** Where the actual execution takes place */ public class JcrProcessThread extends ProcessThread implements SlcNames { @@ -34,8 +53,11 @@ public class JcrProcessThread extends ProcessThread implements SlcNames { @Override protected void process() throws InterruptedException { + Session session = null; try { - Node rootRealizedFlowNode = getNode().getNode(SLC_FLOW); + session = getJcrExecutionProcess().getRepository().login(); + Node rootRealizedFlowNode = session.getNode( + getJcrExecutionProcess().getNodePath()).getNode(SLC_FLOW); // we just manage one level for the time being NodeIterator nit = rootRealizedFlowNode.getNodes(SLC_FLOW); while (nit.hasNext()) { @@ -69,7 +91,10 @@ public class JcrProcessThread extends ProcessThread implements SlcNames { } } } catch (RepositoryException e) { - throw new ArgeoException("Cannot process " + getNode(), e); + throw new ArgeoException("Cannot process " + + getJcrExecutionProcess().getNodePath(), e); + } finally { + JcrUtils.logoutQuietly(session); } } @@ -84,48 +109,38 @@ public class JcrProcessThread extends ProcessThread implements SlcNames { Node flowNode = realizedFlowNode.getSession().getNode(flowPath); String flowName = flowNode.getProperty(SLC_NAME).getString(); - String executionModuleName = SlcJcrUtils - .flowExecutionModuleName(flowPath); - String executionModuleVersion = SlcJcrUtils - .flowExecutionModuleVersion(flowPath); + Node executionModuleNode = flowNode.getSession().getNode( + SlcJcrUtils.modulePath(flowPath)); + String executionModuleName = executionModuleNode.getProperty( + SLC_NAME).getString(); + String executionModuleVersion = executionModuleNode.getProperty( + SLC_VERSION).getString(); RealizedFlow realizedFlow = new RealizedFlow(); realizedFlow.setModuleName(executionModuleName); realizedFlow.setModuleVersion(executionModuleVersion); // retrieve execution spec - DefaultExecutionSpec executionSpec = null; + DefaultExecutionSpec executionSpec = new DefaultExecutionSpec(); + Map attrs = readExecutionSpecAttributes(realizedFlowNode); + executionSpec.setAttributes(attrs); + + // set execution spec name if (flowNode.hasProperty(SlcNames.SLC_SPEC)) { Node executionSpecNode = flowNode.getProperty(SLC_SPEC) .getNode(); - executionSpec = new DefaultExecutionSpec(); executionSpec.setBeanName(executionSpecNode.getProperty( SLC_NAME).getString()); - executionSpec - .setAttributes(readExecutionSpecAttributes(executionSpecNode)); } - // TODO: will with original attr - Map attrs = readExecutionSpecAttributes(realizedFlowNode); + + // explicitly retrieve values Map values = new HashMap(); for (String attrName : attrs.keySet()) { -// if (flowNode.hasNode(attrName)) { -// // we assume this is a primitive -// // since ref are not yet implemented -// Node valueNode = flowNode.getNode(attrName); -// String type = valueNode.getProperty(SLC_TYPE).getString(); -// String valueStr = valueNode.getProperty(SLC_VALUE) -// .getString(); -// Object value = PrimitiveUtils.convert(type, valueStr); -// values.put(attrName, value); -// } else { - ExecutionSpecAttribute attr = attrs.get(attrName); - Object value = attr.getValue(); - values.put(attrName, value); -// } + ExecutionSpecAttribute attr = attrs.get(attrName); + Object value = attr.getValue(); + values.put(attrName, value); } - // if(executionSpec!=null) - // executionSpec.setAttributes(attrs); ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor(flowName, values, executionSpec); realizedFlow.setFlowDescriptor(efd); @@ -157,8 +172,28 @@ public class JcrProcessThread extends ProcessThread implements SlcNames { PrimitiveSpecAttribute specAttr = new PrimitiveSpecAttribute( type, value); attrs.put(specAttrNode.getName(), specAttr); + } else if (specAttrNode + .isNodeType(SlcTypes.SLC_REF_SPEC_ATTRIBUTE)) { + if (!specAttrNode.hasProperty(SLC_VALUE)) { + continue; + } + Integer value = (int) specAttrNode.getProperty(SLC_VALUE) + .getLong(); + RefSpecAttribute specAttr = new RefSpecAttribute(); + NodeIterator children = specAttrNode.getNodes(); + int index = 0; + String id = null; + while (children.hasNext()) { + Node child = children.nextNode(); + if (index == value) + id = child.getName(); + index++; + } + specAttr.setValue(id); + attrs.put(specAttrNode.getName(), specAttr); } - + // throw new SlcException("Unsupported spec attribute " + // + specAttrNode); } return attrs; } catch (RepositoryException e) { @@ -167,7 +202,7 @@ public class JcrProcessThread extends ProcessThread implements SlcNames { } } - protected Node getNode() { - return ((JcrExecutionProcess) getProcess()).getNode(); + protected JcrExecutionProcess getJcrExecutionProcess() { + return (JcrExecutionProcess) getProcess(); } }