X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2FSlcJcrUtils.java;h=e0e52c0d517d4c071d50188f8ad6118ae1c99fe3;hb=76420da459e9fe47612f77166f5e708648e40ef1;hp=793670e7c1b1b235db6c5fc703cd09072250fa8b;hpb=b3c5eaf56f98afc3e1068c154320b51e10b6424b;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrUtils.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrUtils.java index 793670e7c..e0e52c0d5 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrUtils.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrUtils.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * 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; import java.util.Calendar; @@ -6,8 +21,10 @@ import java.util.GregorianCalendar; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; +import javax.jcr.Session; import org.argeo.jcr.JcrUtils; +import org.argeo.jcr.UserJcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.PrimitiveAccessor; import org.argeo.slc.core.execution.PrimitiveUtils; @@ -31,23 +48,20 @@ public class SlcJcrUtils implements SlcNames { return buf.toString(); } - /** Module node name based on module name and version */ - public static String getModuleNodeName(ModuleDescriptor moduleDescriptor) { - return moduleDescriptor.getName() + "_" + moduleDescriptor.getVersion(); - } - - /** Extracts the execution module name of a flow */ - public static String flowExecutionModuleName(String fullFlowPath) { + /** Extracts the path to the related execution module */ + public static String modulePath(String fullFlowPath) { String[] tokens = fullFlowPath.split("/"); - String moduleNodeName = tokens[AGENT_FACTORY_DEPTH + 2]; - return moduleNodeName.substring(0, moduleNodeName.lastIndexOf('_')); + StringBuffer buf = new StringBuffer(fullFlowPath.length()); + for (int i = 0; i < AGENT_FACTORY_DEPTH + 3; i++) { + if (!tokens[i].equals("")) + buf.append('/').append(tokens[i]); + } + return buf.toString(); } - /** Extracts the execution module version of a flow */ - public static String flowExecutionModuleVersion(String fullFlowPath) { - String[] tokens = fullFlowPath.split("/"); - String moduleNodeName = tokens[AGENT_FACTORY_DEPTH + 2]; - return moduleNodeName.substring(moduleNodeName.lastIndexOf('_') + 1); + /** Module node name based on module name and version */ + public static String getModuleNodeName(ModuleDescriptor moduleDescriptor) { + return moduleDescriptor.getName() + "_" + moduleDescriptor.getVersion(); } /** Extracts the agent factory of a flow */ @@ -62,16 +76,35 @@ public class SlcJcrUtils implements SlcNames { } /** Create a new execution process path based on the current time */ - public static String createExecutionProcessPath(String uuid) { + public static String createExecutionProcessPath(Session session, String uuid) { Calendar now = new GregorianCalendar(); - return SlcJcrConstants.PROCESSES_BASE_PATH + '/' + return getSlcProcessesBasePath(session) + '/' + JcrUtils.dateAsPath(now, true) + uuid; } - /** Create a new execution result path based on the current time */ - public static String createResultPath(String uuid) { + /** GEt the base for the user processeses. */ + public static String getSlcProcessesBasePath(Session session) { + try { + Node userHome = UserJcrUtils.getUserHome(session); + if (userHome == null) + throw new SlcException("No user home available for " + + session.getUserID()); + return userHome.getPath() + '/' + SlcNames.SLC_SYSTEM + '/' + + SlcNames.SLC_PROCESSES; + } catch (RepositoryException re) { + throw new SlcException( + "Unexpected error while getting Slc Results Base Path.", re); + } + } + + /** + * Create a new execution result path in the user home based on the current + * time + */ + public static String createResultPath(Session session, String uuid) + throws RepositoryException { Calendar now = new GregorianCalendar(); - return SlcJcrConstants.RESULTS_BASE_PATH + '/' + return SlcJcrResultUtils.getSlcResultsBasePath(session) + '/' + JcrUtils.dateAsPath(now, true) + uuid; } @@ -94,10 +127,14 @@ public class SlcJcrUtils implements SlcNames { if (value instanceof CharSequence) value = PrimitiveUtils.convert(type, ((CharSequence) value).toString()); + if (value instanceof char[]) + value = new String((char[]) value); try { if (type.equals(PrimitiveAccessor.TYPE_STRING)) node.setProperty(propertyName, value.toString()); + else if (type.equals(PrimitiveAccessor.TYPE_PASSWORD)) + node.setProperty(propertyName, value.toString()); else if (type.equals(PrimitiveAccessor.TYPE_INTEGER)) node.setProperty(propertyName, (long) ((Integer) value)); else if (type.equals(PrimitiveAccessor.TYPE_LONG)) @@ -179,15 +216,4 @@ public class SlcJcrUtils implements SlcNames { private SlcJcrUtils() { } - - public static void main(String[] args) { - String path = "/slc/agents/vm/default/org.argeo_1.2.3/myPath/myFlow"; - System.out.println("Flow relative path: " + flowRelativePath(path)); - System.out.println("Execution Module Name: " - + flowExecutionModuleName(path)); - System.out.println("Execution Module Version: " - + flowExecutionModuleVersion(path)); - System.out.println("Agent Factory path: " + flowAgentFactoryPath(path)); - } - }