/* 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.activiti.workflow.simple.alfresco.conversion; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.activiti.workflow.simple.alfresco.conversion.script.PropertyReference; import org.activiti.workflow.simple.alfresco.conversion.script.ScriptTaskListenerBuilder; import org.activiti.workflow.simple.alfresco.model.M2Model; import org.activiti.workflow.simple.alfresco.model.M2Namespace; import org.activiti.workflow.simple.alfresco.model.config.Extension; import org.activiti.workflow.simple.converter.WorkflowDefinitionConversion; /** * Util class that contains methods related to Alfresco-artifacts used in * workflow definition conversion. * * @author Frederik Heremans */ public class AlfrescoConversionUtil implements AlfrescoConversionConstants { /** * @return a valid string to use as id, based on the given String. All invalid * characters are removed. */ public static String getValidIdString(String s) { if(s != null) { return s.toLowerCase().replace(" ", "").replace("_", "").replace("-", "_"); } return null; } /** * @param prefix namespace prefix * @param name local name. All characters that are not allowed are removed from the given value, * @see #getValidIdString(String) * @return fully qualified name */ public static String getQualifiedName(String prefix, String name) { return prefix + ":" + getValidIdString(name); } public static M2Namespace createNamespace(String prefix) { String uri = MessageFormat.format(CONTENT_MODEL_NAMESPACE_URL, prefix); return new M2Namespace(uri, prefix); } public static String getUrlQualifiedPropertyName(String prefixedProperty, M2Namespace nameSpace) { return "{" + nameSpace.getUri() + "}" + prefixedProperty.replace(nameSpace.getPrefix() +":", ""); } // Artifact related methods public static void storeContentModel(M2Model model, WorkflowDefinitionConversion conversion) { conversion.setArtifact(ARTIFACT_CONTENT_MODEL_KEY, model); } public static M2Model getContentModel(WorkflowDefinitionConversion conversion) { return (M2Model) conversion.getArtifact(ARTIFACT_CONTENT_MODEL_KEY); } public static void storeExtension(Extension module, WorkflowDefinitionConversion conversion) { conversion.setArtifact(ARTIFACT_SHARE_CONFIG_EXTENSION, module); } public static Extension getExtension(WorkflowDefinitionConversion conversion) { return (Extension) conversion.getArtifact(ARTIFACT_SHARE_CONFIG_EXTENSION); } public static void storeModelNamespacePrefix(String prefix, WorkflowDefinitionConversion conversion) { conversion.setArtifact(ARTIFACT_MODEL_NAMESPACE_PREFIX, prefix); } public static String getModelNamespacePrefix(WorkflowDefinitionConversion conversion) { return (String) conversion.getArtifact(ARTIFACT_MODEL_NAMESPACE_PREFIX); } @SuppressWarnings("unchecked") public static List<PropertyReference> getPropertyReferences(WorkflowDefinitionConversion conversion) { return (List<PropertyReference>) conversion.getArtifact(ARTIFACT_PROPERTY_REFERENCES); } /** * @return the {@link PropertySharing} object for the given usertask-id. Creates and registers a new * object if there is no {@link PropertySharing} object registered for the given usertask. */ @SuppressWarnings("unchecked") public static PropertySharing getPropertySharing(WorkflowDefinitionConversion conversion, String userTaskId) { List<PropertySharing> sharingList = (List<PropertySharing>) conversion.getArtifact(ARTIFACT_PROPERTY_SHARING); if(sharingList == null) { sharingList = new ArrayList<PropertySharing>(); conversion.setArtifact(ARTIFACT_PROPERTY_SHARING, sharingList); } PropertySharing result = null; for(PropertySharing sharing : sharingList) { if(userTaskId.equals(sharing.getUserTaskId())) { result = sharing; } } if(result == null) { result = new PropertySharing(); result.setUserTaskId(userTaskId); sharingList.add(result); } return result; } /** * @return the {@link ScriptTaskListenerBuilder} object for the given usertask-id. Creates and registers a new * object if there is no {@link ScriptTaskListenerBuilder} object registered for the given usertask. */ @SuppressWarnings("unchecked") public static ScriptTaskListenerBuilder getScriptTaskListenerBuilder(WorkflowDefinitionConversion conversion, String userTaskId, String eventName) { String key = userTaskId + "-" + eventName; Map<String, ScriptTaskListenerBuilder> builderMap = (Map<String, ScriptTaskListenerBuilder>) conversion.getArtifact(ARTIFACT_PROPERTY_TASK_SCRIPT_BUILDER); if(builderMap == null) { builderMap = new HashMap<String, ScriptTaskListenerBuilder>(); conversion.setArtifact(ARTIFACT_PROPERTY_TASK_SCRIPT_BUILDER, builderMap); } ScriptTaskListenerBuilder result = builderMap.get(key); if(result == null) { result = new ScriptTaskListenerBuilder(); result.setEvent(eventName); builderMap.put(key, result); } return result; } @SuppressWarnings("unchecked") public static boolean hasTaskScriptTaskListenerBuilder(WorkflowDefinitionConversion conversion, String userTaskId, String eventName) { String key = userTaskId + "-" + eventName; Map<String, ScriptTaskListenerBuilder> builderMap = (Map<String, ScriptTaskListenerBuilder>) conversion.getArtifact(ARTIFACT_PROPERTY_TASK_SCRIPT_BUILDER); if(builderMap != null) { return builderMap.get(key) != null; } return false; } }