/* * 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. */ package org.uberfire.ext.wires.bayesian.network.client.shapes; import java.util.List; import java.util.Map; import com.ait.lienzo.client.core.shape.Rectangle; import com.ait.lienzo.client.core.shape.Text; import com.google.common.collect.Maps; import org.uberfire.ext.wires.bayesian.network.client.utils.BayesianUtils; import org.uberfire.ext.wires.bayesian.network.parser.client.model.BayesVariable; import org.uberfire.ext.wires.core.api.shapes.OverridesFactoryDescription; import org.uberfire.ext.wires.core.api.shapes.WiresBaseShape; import org.uberfire.ext.wires.core.client.util.ShapesUtils; public class EditableBayesianNode extends WiresBaseShape implements OverridesFactoryDescription { private static final int BOUNDARY_SIZE = 10; private final Rectangle rectangle; private final Rectangle bounding; private final BayesVariable variable; private Rectangle header; private Text textHeader; private Map<Text, List<Rectangle>> porcentualBars; public EditableBayesianNode() { this(0, 0, 0, 0, ""); } public EditableBayesianNode(final Rectangle shape) { this(shape.getWidth(), shape.getHeight(), shape.getX(), shape.getY(), BayesianUtils.getNodeColors()[0][0]); } public EditableBayesianNode(final double width, final double height, final double positionXNode, final double positionYNode, final String fillColor) { this(width, height, positionXNode, positionYNode, fillColor, new BayesVariable()); } public EditableBayesianNode(final double width, final double height, final double positionXNode, final double positionYNode, final String fillColor, final BayesVariable variable) { this.variable = variable; rectangle = new Rectangle(width, height); rectangle.setStrokeColor(ShapesUtils.RGB_STROKE_SHAPE); rectangle.setStrokeWidth(ShapesUtils.RGB_STROKE_WIDTH_SHAPE); rectangle.setFillColor(fillColor); bounding = new Rectangle(width + BOUNDARY_SIZE, height + BOUNDARY_SIZE, rectangle.getCornerRadius()); bounding.setX(getX() - (BOUNDARY_SIZE / 2)); bounding.setY(getY() - (BOUNDARY_SIZE / 2)); bounding.setStrokeWidth(BOUNDARY_SIZE); bounding.setAlpha(0.1); add(rectangle); setX(positionXNode); setY(positionYNode); this.porcentualBars = Maps.newHashMap(); } @Override public void setSelected(final boolean isSelected) { if (isSelected) { add(bounding); } else { remove(bounding); } } @Override public boolean contains(double cx, double cy) { //We don't have any ControlPoints so no need to worry about whether we contain a given point return false; } public void buildNode() { add(this.header); add(this.textHeader); for (Map.Entry<Text, List<Rectangle>> porcenualBar : this.porcentualBars.entrySet()) { for (Rectangle rec : porcenualBar.getValue()) { add(rec); } add(porcenualBar.getKey()); } } public Rectangle getParentNode() { return rectangle; } public Rectangle getHeader() { return header; } public void setHeader(final Rectangle header) { this.header = header; } public Text getTextHeader() { return textHeader; } public void setTextHeader(final Text textHeader) { this.textHeader = textHeader; } public Map<Text, List<Rectangle>> getPorcentualsBar() { return porcentualBars; } public void setPorcentualBars(final Map<Text, List<Rectangle>> porcentualBars) { this.porcentualBars = porcentualBars; } public double getWidth() { return rectangle.getWidth(); } public BayesVariable getVariable() { return variable; } @Override public String getDescription() { return variable.getName(); } }