+/*
+ * 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;
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;
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 */
}
/** 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;
}
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))
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));
- }
-
}