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.io.graphml;
29  
30  import y.view.NodeRealizer;
31  import y.view.ShapeNodeRealizer;
32  
33  import java.awt.Color;
34  import java.awt.Graphics2D;
35  
36  import demo.view.DemoDefaults;
37  
38  /**
39   * A simple customization of {@link y.view.ShapeNodeRealizer} that holds additional
40   * fields.
41   * GraphML serialization of this realizer and its additional fields is handled by
42   * {@link CustomNodeRealizerSerializer}.
43   */
44  public class CustomNodeRealizer extends ShapeNodeRealizer {
45    // Custom value
46    private int customValue;
47    // Custom attribute
48    private String customAttribute;
49  
50    /** Creates a new instance of CustomNodeRealizer. */
51    public CustomNodeRealizer() {
52      setSize(60, 40);
53      setCustomAttribute("v1.0");
54      setCustomValue(333);
55      setFillColor(DemoDefaults.DEFAULT_NODE_COLOR);
56    }
57  
58    /** Creates a new instance of CustomNodeRealizer. */
59    public CustomNodeRealizer(NodeRealizer nr) {
60      super(nr);
61      // If the given node realizer is of this type, then apply copy semantics. 
62      if (nr instanceof CustomNodeRealizer) {
63        CustomNodeRealizer fnr = (CustomNodeRealizer) nr;
64        // Copy the values of custom attributes. 
65        setCustomValue(fnr.customValue);
66        setCustomAttribute(fnr.customAttribute);
67      }
68    }
69  
70    public NodeRealizer createCopy(NodeRealizer nr) {
71      return new CustomNodeRealizer(nr);
72    }
73  
74    public void paintText(Graphics2D gfx) {
75      super.paintText(gfx);
76      gfx.setColor(Color.blue);
77      gfx.drawString("value: " + getCustomValue(), (float) getX() + 4, (float) getY() + 12);
78      gfx.drawString("attr:  " + getCustomAttribute(), (float) getX() + 4, (float) (getY() + getHeight() - 2));
79    }
80  
81    public int getCustomValue() {
82      return customValue;
83    }
84  
85    public void setCustomValue(int customValue) {
86      this.customValue = customValue;
87    }
88  
89    public String getCustomAttribute() {
90      return customAttribute;
91    }
92  
93    public void setCustomAttribute(String customAttribute) {
94      this.customAttribute = customAttribute;
95    }
96  }
97