/* * 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.core.client.canvas.controls; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; 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.event.AbstractCanvasHandlerEvent; import org.kie.workbench.common.stunner.core.client.shape.Shape; import org.kie.workbench.common.stunner.core.client.shape.view.HasEventHandlers; import org.kie.workbench.common.stunner.core.client.shape.view.event.ViewHandler; import org.kie.workbench.common.stunner.core.graph.Element; public abstract class AbstractCanvasHandlerRegistrationControl<H extends AbstractCanvasHandler> extends AbstractCanvasHandlerControl<H> implements CanvasRegistationControl<H, Element> { private static Logger LOGGER = Logger.getLogger(AbstractCanvasHandlerRegistrationControl.class.getName()); private final Map<String, ViewHandler<?>> handlers = new HashMap<>(); public void update(final Element element) { // Do nothing by default. } protected void registerHandler(final String uuid, final ViewHandler<?> handler) { handlers.put(uuid, handler); } @Override protected void doDisable() { deregisterAll(); } public void deregisterAll() { new HashSet<>(handlers.keySet()) .stream() .forEach(this::deregister); handlers.clear(); } @Override public void deregister(final Element element) { deregister(element.getUUID()); } public boolean isRegistered(final Element element) { return isRegistered(element.getUUID()); } protected void deregister(final String uuid) { if (isRegistered(uuid)) { final Shape shape = canvasHandler.getCanvas().getShape(uuid); final ViewHandler<?> handler = handlers.get(uuid); doDeregisterHandler(shape, handler); } } protected boolean checkNotRegistered(final Element element) { if (isRegistered(element)) { LOGGER.log(Level.WARNING, "Trying to register element [" + element.getUUID() + "] again into " + "the control for type [" + this.getClass().getName() + "]"); return false; } return true; } protected boolean checkEventContext(final AbstractCanvasHandlerEvent canvasHandlerEvent) { final CanvasHandler _canvasHandler = canvasHandlerEvent.getCanvasHandler(); return canvasHandler != null && canvasHandler.equals(_canvasHandler); } private void doDeregisterHandler(final Shape shape, final ViewHandler<?> handler) { if (null != shape && null != handler) { final HasEventHandlers hasEventHandlers = (HasEventHandlers) shape.getShapeView(); hasEventHandlers.removeHandler(handler); handlers.remove(shape.getUUID()); } } private boolean isRegistered(final String uuid) { return handlers.containsKey(uuid); } }