/* * Copyright 2015 JBoss, by Red Hat, Inc * * 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. */ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.uberfire.ext.wires.core.client.magnets; import java.util.ArrayList; import java.util.List; import com.ait.lienzo.client.core.shape.Circle; import com.ait.lienzo.client.core.types.Point2D; import org.uberfire.commons.uuid.UUID; import org.uberfire.ext.wires.core.api.controlpoints.ControlPoint; import org.uberfire.ext.wires.core.api.magnets.Magnet; import org.uberfire.ext.wires.core.client.util.ShapesUtils; public class DefaultMagnet extends Circle implements Magnet<Circle> { private static final int RADIUS = 8; private final String id; private final List<ControlPoint> attachedControlPoints = new ArrayList<ControlPoint>(); public DefaultMagnet(final double x, final double y) { super(RADIUS); this.id = UUID.uuid(); setFillColor(ShapesUtils.MAGNET_RGB_FILL_SHAPE); setStrokeWidth(ShapesUtils.CP_RGB_STROKE_WIDTH_SHAPE); setX(x); setY(y); setDraggable(false); } @Override public String getId() { return id; } @Override public void attachControlPoint(final ControlPoint controlPoint) { attachedControlPoints.add(controlPoint); } @Override public void detachControlPoint(final ControlPoint controlPoint) { attachedControlPoints.remove(controlPoint); } @Override public List<ControlPoint> getAttachedControlPoints() { return attachedControlPoints; } @Override public void setActive(final boolean isActive) { if (isActive) { setFillColor(ShapesUtils.MAGNET_ACTIVE_RGB_FILL_SHAPE); } else { setFillColor(ShapesUtils.MAGNET_RGB_FILL_SHAPE); } } @Override public Circle setX(final double x) { final Circle c = super.setX(x); moveAttachedControlPoints(); return c; } @Override public Circle setY(final double y) { final Circle c = super.setY(y); moveAttachedControlPoints(); return c; } @Override public Circle setLocation(final Point2D p) { final Circle c = super.setLocation(p); moveAttachedControlPoints(); return c; } @Override public void move(final double dx, final double dy) { setLocation(getLocation().add(new Point2D(dx, dy))); } protected void moveAttachedControlPoints() { final List<ControlPoint> controlPoints = getAttachedControlPoints(); if (controlPoints == null || controlPoints.isEmpty()) { return; } for (ControlPoint cp : controlPoints) { final double dx = getX(); final double dy = getY(); cp.setX(dx); cp.setY(dy); cp.getHandler().onMove(dx, dy); } } @Override public String toString() { return "DefaultMagnet{" + "id=" + id + '}'; } }