/*
* Copyright 2016 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.client.components.palette.factory;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import org.kie.workbench.common.stunner.bpmn.BPMNDefinitionSet;
import org.kie.workbench.common.stunner.bpmn.definition.BPMNDiagramImpl;
import org.kie.workbench.common.stunner.bpmn.definition.BaseEndEvent;
import org.kie.workbench.common.stunner.bpmn.definition.BaseGateway;
import org.kie.workbench.common.stunner.bpmn.definition.BaseStartEvent;
import org.kie.workbench.common.stunner.bpmn.definition.BaseSubprocess;
import org.kie.workbench.common.stunner.bpmn.definition.BaseTask;
import org.kie.workbench.common.stunner.bpmn.definition.Categories;
import org.kie.workbench.common.stunner.bpmn.definition.IntermediateTimerEvent;
import org.kie.workbench.common.stunner.bpmn.definition.Lane;
import org.kie.workbench.common.stunner.bpmn.definition.NoneTask;
import org.kie.workbench.common.stunner.bpmn.definition.ParallelGateway;
import org.kie.workbench.common.stunner.bpmn.definition.ReusableSubprocess;
import org.kie.workbench.common.stunner.bpmn.definition.SequenceFlow;
import org.kie.workbench.common.stunner.bpmn.definition.StartNoneEvent;
import org.kie.workbench.common.stunner.bpmn.definition.StartSignalEvent;
import org.kie.workbench.common.stunner.bpmn.definition.StartTimerEvent;
import org.kie.workbench.common.stunner.core.client.api.ShapeManager;
import org.kie.workbench.common.stunner.core.client.components.palette.factory.BindableDefSetPaletteDefinitionFactory;
import org.kie.workbench.common.stunner.core.client.components.palette.model.definition.DefinitionSetPaletteBuilder;
// TODO: i18n.
@Dependent
public class BPMNPaletteDefinitionFactory extends BindableDefSetPaletteDefinitionFactory {
private static final Map<String, String> CAT_TITLES = new HashMap<String, String>(6) {{
put(Categories.ACTIVITIES,
"Activities");
put(Categories.SUBPROCESSES,
"Subprocesses");
put(Categories.CONNECTING_OBJECTS,
"Connecting objects");
put(Categories.EVENTS,
"Events");
put(Categories.GATEWAYS,
"Gateways");
put(Categories.LANES,
"Lanes");
}};
private static final Map<String, Class<?>> CAT_DEF_IDS = new HashMap<String, Class<?>>(1) {{
put(Categories.ACTIVITIES,
NoneTask.class);
put(Categories.SUBPROCESSES,
ReusableSubprocess.class);
put(Categories.CONNECTING_OBJECTS,
SequenceFlow.class);
put(Categories.EVENTS,
StartNoneEvent.class);
put(Categories.EVENTS,
StartSignalEvent.class);
put(Categories.EVENTS,
StartTimerEvent.class);
put(Categories.EVENTS,
IntermediateTimerEvent.class);
put(Categories.GATEWAYS,
ParallelGateway.class);
put(Categories.LANES,
Lane.class);
}};
private static final Map<String, String> MORPH_GROUP_TITLES = new HashMap<String, String>(5) {{
put(BaseTask.class.getName(),
"Tasks");
put(BaseStartEvent.class.getName(),
"Start Events");
put(BaseEndEvent.class.getName(),
"End Events");
put(BaseSubprocess.class.getName(),
"Subprocesses");
put(BaseGateway.class.getName(),
"Gateways");
}};
@Inject
public BPMNPaletteDefinitionFactory(final ShapeManager shapeManager,
final DefinitionSetPaletteBuilder paletteBuilder) {
super(shapeManager,
paletteBuilder);
}
@Override
protected void configureBuilder() {
super.configureBuilder();
// Exclude BPMN Diagram from palette model.
excludeDefinition(BPMNDiagramImpl.class);
// Exclude the none task from palette, it will be available by dragging from the main Activities category.
excludeDefinition(NoneTask.class);
// TODO: Exclude connectors category from being present on the palette model - Dropping connectors from palette produces an error right now, must fix it on lienzo side.
excludeCategory(Categories.CONNECTING_OBJECTS);
}
@Override
protected String getCategoryTitle(final String id) {
return CAT_TITLES.get(id);
}
@Override
protected Class<?> getCategoryTargetDefinitionId(final String id) {
return CAT_DEF_IDS.get(id);
}
@Override
protected String getCategoryDescription(final String id) {
return CAT_TITLES.get(id);
}
@Override
protected String getMorphGroupTitle(final String morphBaseId,
final Object definition) {
return MORPH_GROUP_TITLES.get(morphBaseId);
}
@Override
protected String getMorphGroupDescription(final String morphBaseId,
final Object definition) {
return MORPH_GROUP_TITLES.get(morphBaseId);
}
@Override
protected Class<?> getDefinitionSetType() {
return BPMNDefinitionSet.class;
}
}