ErdAttributeNodePainter.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.view.entityrelationship.painters; 29 30 import demo.view.flowchart.painters.FlowchartStart1Painter; 31 import y.view.GenericNodeRealizer; 32 import y.view.LineType; 33 import y.view.NodeRealizer; 34 35 import java.awt.Shape; 36 import java.awt.geom.Ellipse2D; 37 38 /** 39 * This is a painter to display an attribute node for entity relationship diagrams (ERD). 40 * 41 * An attribute is represented by an elliptic shape. It is possible to display a weak 42 * attribute by drawing a double border. 43 */ 44 public class ErdAttributeNodePainter extends FlowchartStart1Painter { 45 /** 46 * Calculates the interior shape for the specified node. 47 * @param context The node context 48 */ 49 protected Shape newDecoration( final NodeRealizer context ) { 50 if (hasDoubleBorder(context)) { 51 final LineType lineType = context.getLineType(); 52 final float lw = lineType.getLineWidth(); 53 54 final double offset = 2 + lw; 55 56 final double x = context.getX(); 57 final double y = context.getY(); 58 final double width = context.getWidth(); 59 final double height = context.getHeight(); 60 61 if (offset + lw < width * 0.5 && offset + lw < height * 0.5) { 62 return new Ellipse2D.Double(x + offset, y + offset, width - 2 * offset, height - 2 * offset); 63 } else { 64 return new Ellipse2D.Double(x, y + height * 0.5, 0, 0); 65 } 66 } else { 67 return null; 68 } 69 } 70 71 /** 72 * Tests if the style property {@link ErdRealizerFactory#DOUBLE_BORDER} is set for the context realizer. 73 * @param context The context node 74 * @return <code>true</code>, if style property border is set, <code>false</code> otherwise 75 */ 76 protected boolean hasDoubleBorder(NodeRealizer context) { 77 return Boolean.TRUE.equals(((GenericNodeRealizer) context).getStyleProperty(ErdRealizerFactory.DOUBLE_BORDER)); 78 } 79 } 80