]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrUtils.java
Add password spec type
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / SlcJcrUtils.java
index 793670e7c1b1b235db6c5fc703cd09072250fa8b..e0e52c0d517d4c071d50188f8ad6118ae1c99fe3 100644 (file)
@@ -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));
-       }
-
 }