/* * 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.client.widgets.palette.factory; import java.util.Collection; import java.util.LinkedList; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; import javax.inject.Inject; import org.jboss.errai.ioc.client.api.ManagedInstance; import org.jboss.errai.ioc.client.container.SyncBeanDef; import org.jboss.errai.ioc.client.container.SyncBeanManager; import org.kie.workbench.common.stunner.client.widgets.palette.BS3PaletteWidget; import org.kie.workbench.common.stunner.core.client.api.ShapeManager; import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler; import org.kie.workbench.common.stunner.core.client.canvas.CanvasHandler; import org.kie.workbench.common.stunner.core.client.canvas.controls.event.BuildCanvasShapeEvent; import org.kie.workbench.common.stunner.core.client.canvas.controls.event.CanvasShapeDragStartEvent; import org.kie.workbench.common.stunner.core.client.canvas.controls.event.CanvasShapeDragUpdateEvent; import org.kie.workbench.common.stunner.core.client.components.palette.factory.AbstractPaletteFactory; import org.kie.workbench.common.stunner.core.client.components.palette.factory.DefaultDefSetPaletteDefinitionFactory; import org.kie.workbench.common.stunner.core.client.components.palette.model.definition.DefinitionSetPalette; @Dependent public class BS3PaletteFactoryImpl extends AbstractPaletteFactory<DefinitionSetPalette, BS3PaletteWidget> implements BS3PaletteFactory { private final Event<BuildCanvasShapeEvent> buildCanvasShapeEvent; private final Event<CanvasShapeDragStartEvent> canvasShapeDragStartEvent; private final Event<CanvasShapeDragUpdateEvent> canvasShapeDragUpdateEvent; private final List<BS3PaletteViewFactory> viewFactories = new LinkedList<>(); @Inject public BS3PaletteFactoryImpl(final ShapeManager shapeManager, final SyncBeanManager beanManager, final ManagedInstance<DefaultDefSetPaletteDefinitionFactory> defaultPaletteDefinitionFactoryInstance, final ManagedInstance<BS3PaletteWidget> paletteInstances, final Event<BuildCanvasShapeEvent> buildCanvasShapeEvent, final Event<CanvasShapeDragStartEvent> canvasShapeDragStartEvent, final Event<CanvasShapeDragUpdateEvent> canvasShapeDragUpdateEvent) { super(shapeManager, beanManager, defaultPaletteDefinitionFactoryInstance, paletteInstances); this.buildCanvasShapeEvent = buildCanvasShapeEvent; this.canvasShapeDragStartEvent = canvasShapeDragStartEvent; this.canvasShapeDragUpdateEvent = canvasShapeDragUpdateEvent; } @PostConstruct @SuppressWarnings("unchecked") public void init() { super.init(); Collection<SyncBeanDef<BS3PaletteViewFactory>> beanDefSets = beanManager.lookupBeans(BS3PaletteViewFactory.class); for (SyncBeanDef<BS3PaletteViewFactory> defSet : beanDefSets) { BS3PaletteViewFactory factory = defSet.getInstance(); viewFactories.add(factory); } } @Override public BS3PaletteWidget newPalette(final String shapeSetId, final CanvasHandler canvasHandler) { final BS3PaletteWidget palette = super.newPalette(shapeSetId); if (null != canvasHandler) { palette.onItemDrop((definition, factory, x, y) -> buildCanvasShapeEvent.fire(new BuildCanvasShapeEvent((AbstractCanvasHandler) canvasHandler, definition, factory, x, y))); palette.onItemDragStart((definition, factory, x, y) -> canvasShapeDragStartEvent.fire(new CanvasShapeDragStartEvent((AbstractCanvasHandler) canvasHandler, definition, factory, x, y))); palette.onItemDragUpdate((definition, factory, x, y) -> canvasShapeDragUpdateEvent.fire(new CanvasShapeDragUpdateEvent((AbstractCanvasHandler) canvasHandler, definition, factory, x, y))); } return palette; } @Override protected void beforeBindPalette(final DefinitionSetPalette paletteDefinition, final BS3PaletteWidget palette, final String shapeSetId) { super.beforeBindPalette(paletteDefinition, palette, shapeSetId); final String defSetId = paletteDefinition.getDefinitionSetId(); BS3PaletteViewFactory viewFactory = getViewFactory(defSetId); if (null == viewFactory) { viewFactory = new BS3PaletteGlyphViewFactory(shapeManager); } palette.setViewFactory(viewFactory); } private BS3PaletteViewFactory getViewFactory(final String defSetId) { for (final BS3PaletteViewFactory factory : viewFactories) { if (factory.accepts(defSetId)) { return factory; } } return null; } }