Search in sources :

Example 1 with M2Namespace

use of org.activiti.workflow.simple.alfresco.model.M2Namespace in project Activiti by Activiti.

the class InitializeAlfrescoModelsConversionListener method addContentModel.

protected M2Model addContentModel(WorkflowDefinitionConversion conversion, String processId) {
    // The process ID is used as namespace prefix, to guarantee uniqueness
    // Set general model properties
    M2Model model = new M2Model();
    model.setName(AlfrescoConversionUtil.getQualifiedName(processId, CONTENT_MODEL_UNQUALIFIED_NAME));
    M2Namespace namespace = AlfrescoConversionUtil.createNamespace(processId);
    model.getNamespaces().add(namespace);
    // Import required alfresco models
    model.getImports().add(DICTIONARY_NAMESPACE);
    model.getImports().add(CONTENT_NAMESPACE);
    model.getImports().add(BPM_NAMESPACE);
    // Store model in the conversion artifacts to be accessed later
    AlfrescoConversionUtil.storeContentModel(model, conversion);
    AlfrescoConversionUtil.storeModelNamespacePrefix(namespace.getPrefix(), conversion);
    return model;
}
Also used : M2Namespace(org.activiti.workflow.simple.alfresco.model.M2Namespace) M2Model(org.activiti.workflow.simple.alfresco.model.M2Model)

Example 2 with M2Namespace

use of org.activiti.workflow.simple.alfresco.model.M2Namespace in project Activiti by Activiti.

the class PropertyReference method validate.

public void validate(M2Model model) {
    String namespacePrefix = model.getNamespaces().get(0).getPrefix();
    boolean valid = false;
    if (propertyName.contains(":")) {
        // Already prefixed. Check if we import that namespace...
        for (M2Namespace imported : model.getImports()) {
            if (propertyName.startsWith(imported.getPrefix())) {
                valid = true;
                break;
            }
        }
        if (!valid && !propertyName.startsWith(AlfrescoConversionConstants.WORKFLOW_NAMESPACE.getPrefix()) && !propertyName.startsWith(AlfrescoConversionConstants.BPM_NAMESPACE.getPrefix())) {
            throw new SimpleWorkflowException("Property reference: " + this.getPlaceholder() + " references a property for a namespace that is not imported in the BPM-model");
        } else {
            valid = true;
        }
    }
    if (!valid && !model.isContainedInModel(getQualifiedName(namespacePrefix))) {
        throw new SimpleWorkflowException("Property reference: " + this.getPlaceholder() + " does not reference an existing property.");
    }
}
Also used : M2Namespace(org.activiti.workflow.simple.alfresco.model.M2Namespace) SimpleWorkflowException(org.activiti.workflow.simple.exception.SimpleWorkflowException)

Example 3 with M2Namespace

use of org.activiti.workflow.simple.alfresco.model.M2Namespace in project Activiti by Activiti.

the class InitializeAlfrescoModelsConversionListener method afterStepsConversion.

@Override
public void afterStepsConversion(WorkflowDefinitionConversion conversion) {
    M2Model model = AlfrescoConversionUtil.getContentModel(conversion);
    M2Namespace modelNamespace = model.getNamespaces().get(0);
    for (FlowElement flowElement : conversion.getProcess().getFlowElements()) {
        if (flowElement instanceof StartEvent) {
            StartEvent startEvent = (StartEvent) flowElement;
            if (startEvent.getFormKey() == null) {
                Module module = AlfrescoConversionUtil.getExtension(conversion).getModules().get(0);
                Configuration detailsForm = module.addConfiguration(EVALUATOR_STRING_COMPARE, MessageFormat.format(EVALUATOR_CONDITION_ACTIVITI, conversion.getProcess().getId()));
                // is available
                if (conversion.getWorkflowDefinition().getStartFormDefinition() != null && !conversion.getWorkflowDefinition().getStartFormDefinition().getFormGroups().isEmpty()) {
                    // Create the content model for the start-task
                    M2Type type = new M2Type();
                    model.getTypes().add(type);
                    type.setName(AlfrescoConversionUtil.getQualifiedName(modelNamespace.getPrefix(), AlfrescoConversionConstants.START_TASK_SIMPLE_NAME));
                    type.setParentName(AlfrescoConversionConstants.DEFAULT_START_FORM_TYPE);
                    // Create a form-config for the start-task
                    Module shareModule = AlfrescoConversionUtil.getExtension(conversion).getModules().get(0);
                    Configuration configuration = shareModule.addConfiguration(AlfrescoConversionConstants.EVALUATOR_TASK_TYPE, type.getName());
                    Form formConfig = configuration.createForm();
                    formConfig.setStartForm(true);
                    // Populate model and form based on FormDefinition
                    formCreator.createForm(type, formConfig, conversion.getWorkflowDefinition().getStartFormDefinition(), conversion);
                    // Use the same form-config for the workflow details
                    detailsForm.addForm(formConfig);
                    // Set formKey on start-event, referencing type
                    startEvent.setFormKey(type.getName());
                } else {
                    // Revert to the default start-form
                    startEvent.setFormKey(DEFAULT_START_FORM_TYPE);
                    // Also add form-config to the share-module for workflow detail screen, based on the default form
                    populateDefaultDetailFormConfig(detailsForm);
                }
            }
        }
    }
    // Check all elements that can contain PropertyReferences or need additional builders invoked
    List<PropertyReference> references = AlfrescoConversionUtil.getPropertyReferences(conversion);
    for (FlowElement element : conversion.getProcess().getFlowElements()) {
        if (element instanceof SequenceFlow) {
            resolvePropertyRefrencesInSequenceFlow((SequenceFlow) element, modelNamespace, references);
        } else if (element instanceof IntermediateCatchEvent) {
            resolvePropertyRefrencesInCatchEvent((IntermediateCatchEvent) element, modelNamespace, references);
        } else if (element instanceof ServiceTask) {
            resolvePropertyRefrencesInServiceTask((ServiceTask) element, modelNamespace, references);
        } else if (element instanceof UserTask) {
            addScriptListenersToUserTask((UserTask) element, conversion);
        }
    }
    // Check if all property-references reference a valid property
    if (references != null && !references.isEmpty()) {
        for (PropertyReference reference : references) {
            reference.validate(model);
        }
    }
}
Also used : M2Namespace(org.activiti.workflow.simple.alfresco.model.M2Namespace) ServiceTask(org.activiti.bpmn.model.ServiceTask) Configuration(org.activiti.workflow.simple.alfresco.model.config.Configuration) Form(org.activiti.workflow.simple.alfresco.model.config.Form) SequenceFlow(org.activiti.bpmn.model.SequenceFlow) M2Model(org.activiti.workflow.simple.alfresco.model.M2Model) IntermediateCatchEvent(org.activiti.bpmn.model.IntermediateCatchEvent) UserTask(org.activiti.bpmn.model.UserTask) PropertyReference(org.activiti.workflow.simple.alfresco.conversion.script.PropertyReference) M2Type(org.activiti.workflow.simple.alfresco.model.M2Type) FlowElement(org.activiti.bpmn.model.FlowElement) StartEvent(org.activiti.bpmn.model.StartEvent) Module(org.activiti.workflow.simple.alfresco.model.config.Module)

Example 4 with M2Namespace

use of org.activiti.workflow.simple.alfresco.model.M2Namespace in project Activiti by Activiti.

the class AlfrescoHumanStepDefinitionConverter method convertStepDefinition.

@Override
public UserTask convertStepDefinition(StepDefinition stepDefinition, WorkflowDefinitionConversion conversion) {
    HumanStepDefinition humanStep = (HumanStepDefinition) stepDefinition;
    validate(humanStep);
    M2Model model = AlfrescoConversionUtil.getContentModel(conversion);
    M2Namespace modelNamespace = model.getNamespaces().get(0);
    // Let superclass handle BPMN-specific conversion
    UserTask userTask = super.convertStepDefinition(stepDefinition, conversion);
    // Clear form-properties in the BPMN file, as we use custom form-mapping in Alfresco
    userTask.getFormProperties().clear();
    userTask.setName(humanStep.getName() != null ? humanStep.getName() : humanStep.getId());
    // Create the content model for the task
    M2Type type = new M2Type();
    model.getTypes().add(type);
    type.setName(AlfrescoConversionUtil.getQualifiedName(modelNamespace.getPrefix(), humanStep.getId()));
    type.setParentName(AlfrescoConversionConstants.DEFAULT_BASE_FORM_TYPE);
    // Update task-key on the task itself
    userTask.setFormKey(type.getName());
    // Create a form-config for the task
    Module shareModule = AlfrescoConversionUtil.getExtension(conversion).getModules().get(0);
    Configuration configuration = shareModule.addConfiguration(AlfrescoConversionConstants.EVALUATOR_TASK_TYPE, type.getName());
    Form formConfig = configuration.createForm();
    // Populate model and form based on FormDefinition
    formCreator.createForm(type, formConfig, humanStep.getForm(), conversion);
    // Set up property sharing using task-listeners
    addPropertySharing(humanStep, conversion, userTask);
    // is created
    if (humanStep.getAssignmentType() == HumanStepAssignmentType.USER) {
        String assignee = humanStep.getAssignment().getAssignee();
        if (assignee != null && PropertyReference.isPropertyReference(assignee)) {
            PropertyReference reference = PropertyReference.createReference(assignee);
            AlfrescoConversionUtil.getPropertyReferences(conversion).add(reference);
            userTask.setAssignee(reference.getUsernameReferenceExpression(modelNamespace.getPrefix()));
        }
    } else if (humanStep.getAssignmentType() == HumanStepAssignmentType.USERS) {
        if (humanStep.getAssignment().getCandidateUsers() != null) {
            userTask.setCandidateUsers(resolveUserPropertyReferences(humanStep.getAssignment().getCandidateUsers(), modelNamespace.getPrefix(), conversion));
        }
    } else if (humanStep.getAssignmentType() == HumanStepAssignmentType.GROUPS) {
        if (humanStep.getAssignment().getCandidateGroups() != null) {
            userTask.setCandidateGroups(resolveGroupPropertyReferences(humanStep.getAssignment().getCandidateGroups(), modelNamespace.getPrefix(), conversion));
        }
    }
    return userTask;
}
Also used : M2Namespace(org.activiti.workflow.simple.alfresco.model.M2Namespace) PropertyReference(org.activiti.workflow.simple.alfresco.conversion.script.PropertyReference) HumanStepDefinition(org.activiti.workflow.simple.definition.HumanStepDefinition) M2Type(org.activiti.workflow.simple.alfresco.model.M2Type) Configuration(org.activiti.workflow.simple.alfresco.model.config.Configuration) Form(org.activiti.workflow.simple.alfresco.model.config.Form) M2Model(org.activiti.workflow.simple.alfresco.model.M2Model) UserTask(org.activiti.bpmn.model.UserTask) Module(org.activiti.workflow.simple.alfresco.model.config.Module)

Aggregations

M2Namespace (org.activiti.workflow.simple.alfresco.model.M2Namespace)4 M2Model (org.activiti.workflow.simple.alfresco.model.M2Model)3 UserTask (org.activiti.bpmn.model.UserTask)2 PropertyReference (org.activiti.workflow.simple.alfresco.conversion.script.PropertyReference)2 M2Type (org.activiti.workflow.simple.alfresco.model.M2Type)2 Configuration (org.activiti.workflow.simple.alfresco.model.config.Configuration)2 Form (org.activiti.workflow.simple.alfresco.model.config.Form)2 Module (org.activiti.workflow.simple.alfresco.model.config.Module)2 FlowElement (org.activiti.bpmn.model.FlowElement)1 IntermediateCatchEvent (org.activiti.bpmn.model.IntermediateCatchEvent)1 SequenceFlow (org.activiti.bpmn.model.SequenceFlow)1 ServiceTask (org.activiti.bpmn.model.ServiceTask)1 StartEvent (org.activiti.bpmn.model.StartEvent)1 HumanStepDefinition (org.activiti.workflow.simple.definition.HumanStepDefinition)1 SimpleWorkflowException (org.activiti.workflow.simple.exception.SimpleWorkflowException)1