/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * 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.kie.workbench.common.stunner.bpmn.project.factory.impl; import javax.enterprise.context.Dependent; import org.kie.workbench.common.stunner.bpmn.BPMNDefinitionSet; import org.kie.workbench.common.stunner.bpmn.definition.BPMNDiagram; import org.kie.workbench.common.stunner.bpmn.definition.BPMNDiagramImpl; import org.kie.workbench.common.stunner.bpmn.definition.property.diagram.DiagramSet; import org.kie.workbench.common.stunner.bpmn.factory.AbstractBPMNDiagramFactory; import org.kie.workbench.common.stunner.core.diagram.Metadata; import org.kie.workbench.common.stunner.core.graph.Graph; import org.kie.workbench.common.stunner.core.graph.Node; import org.kie.workbench.common.stunner.core.graph.content.definition.Definition; import org.kie.workbench.common.stunner.core.graph.content.definition.DefinitionSet; import org.kie.workbench.common.stunner.project.diagram.ProjectDiagram; import org.kie.workbench.common.stunner.project.diagram.ProjectMetadata; import org.kie.workbench.common.stunner.project.diagram.impl.ProjectDiagramImpl; /** * Custom BPMN factory instance for Diagrams on the Project context. * This factory initializes new BPMN diagrams with some specific project attributes ( given from the current * Project context ). * No need use use the Command API to set the diagram property values for the following reasons: * - No need to check runtime rules. * - No need to perform further undo/redos for these operations. */ @Dependent public class BPMNProjectDiagramFactoryImpl extends AbstractBPMNDiagramFactory<ProjectMetadata, ProjectDiagram> implements BPMNProjectDiagramFactory { public BPMNProjectDiagramFactoryImpl() { setDiagramType(BPMNDiagramImpl.class); } @Override public Class<? extends Metadata> getMetadataType() { return ProjectMetadata.class; } @Override protected Class<?> getDefinitionSetType() { return BPMNDefinitionSet.class; } @Override public ProjectDiagram doBuild(final String name, final ProjectMetadata metadata, final Graph<DefinitionSet, ?> graph) { return new ProjectDiagramImpl(name, graph, metadata); } @Override protected void updateDiagramProperties(final String name, final Node<Definition<BPMNDiagram>, ?> diagramNode, final ProjectMetadata metadata) { super.updateDiagramProperties(name, diagramNode, metadata); // Set kie related properties for the current project. final BPMNDiagram diagram = diagramNode.getContent().getDefinition(); final DiagramSet diagramSet = diagram.getDiagramSet(); final String id = diagramSet.getId().getValue(); final String projectName = null != metadata.getProjectName() ? metadata.getProjectName() + "." : ""; if (null == id || id.isEmpty()) { diagramSet.getId().setValue(projectName + name); } final String p = diagramSet.getPackageProperty().getValue(); if (null == p || p.isEmpty()) { final String metadataPackage = metadata.getProjectPackage(); final String value = metadataPackage == null || metadataPackage.isEmpty() ? org.kie.workbench.common.stunner.bpmn.definition.property.diagram.Package.DEFAULT_PACKAGE : metadata.getProjectPackage(); diagramSet.getPackageProperty().setValue(value); } final String diagramName = diagramSet.getName().getValue(); if (null == diagramName || diagramName.isEmpty()) { diagramSet.getName().setValue(name); } } }