1 pnkfelix 1.1.2.1  // ColorableNode.java, created Wed Jan 13 14:12:37 1999 by pnkfelix
 2 cananian 1.1.2.10 // Copyright (C) 1998 Felix S. Klock II <pnkfelix@mit.edu>
 3 cananian 1.1.2.9  // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 pnkfelix 1.1.2.1  package harpoon.Analysis.GraphColoring;
 5 pnkfelix 1.1.2.1  
 6 pnkfelix 1.1.2.1  /**
 7 pnkfelix 1.1.2.1   * <code>ColorableNode</code>
 8 pnkfelix 1.1.2.1   *  
 9 cananian 1.1.2.10  * @author  Felix S. Klock II <pnkfelix@mit.edu>
10 cananian 1.2       * @version $Id: ColorableNode.java,v 1.2 2002/02/25 20:57:17 cananian Exp $
11 pnkfelix 1.1.2.1   */
12 pnkfelix 1.1.2.1  
13 pnkfelix 1.1.2.5  public abstract class ColorableNode extends Node {
14 pnkfelix 1.1.2.1      
15 pnkfelix 1.1.2.2      protected Color color;
16 pnkfelix 1.1.2.1      
17 pnkfelix 1.1.2.1      // hidden tracks whether the node is visible in a graph or has
18 pnkfelix 1.1.2.1      // been temporarily removed for coloring purposes...
19 pnkfelix 1.1.2.1      private boolean hidden;
20 pnkfelix 1.1.2.1  
21 pnkfelix 1.1.2.1      public ColorableNode() {
22 pnkfelix 1.1.2.1          super();
23 pnkfelix 1.1.2.1          // leave 'color' set to null
24 pnkfelix 1.1.2.1      }
25 pnkfelix 1.1.2.1      
26 pnkfelix 1.1.2.1      /** Modifiability check.
27 pnkfelix 1.1.2.8          <BR> <B>effects:</B> If <code>this</code> is allowed to be
28 pnkfelix 1.1.2.8                               modified, returns true.  Else returns
29 pnkfelix 1.1.2.8                               false. 
30 pnkfelix 1.1.2.1      */
31 pnkfelix 1.1.2.1      public boolean isModifiable() {
32 pnkfelix 1.1.2.1          return ! hidden;
33 pnkfelix 1.1.2.1      }
34 pnkfelix 1.1.2.1  
35 pnkfelix 1.1.2.1      /** Returns the color of <code>this</code>.
36 pnkfelix 1.1.2.8          <BR> <B>requires:</B> <code>this</code> has been colored.
37 pnkfelix 1.1.2.8          <BR> <B>effects:</B> If the color of <code>this</code> has
38 pnkfelix 1.1.2.8                               been set, returns the <code>Color</code>
39 pnkfelix 1.1.2.8                               object representing the color of
40 pnkfelix 1.1.2.8                               <code>this</code>.
41 pnkfelix 1.1.2.1       */
42 pnkfelix 1.1.2.1      public Color getColor() throws NodeNotColoredException {
43 pnkfelix 1.1.2.1          if (color == null) {
44 pnkfelix 1.1.2.2              throw new NodeNotColoredException(this + " is not colored.");
45 pnkfelix 1.1.2.1          } else {
46 pnkfelix 1.1.2.1              return color;
47 pnkfelix 1.1.2.1          }
48 pnkfelix 1.1.2.1      }
49 pnkfelix 1.1.2.1      
50 pnkfelix 1.1.2.1      /** Sets the color of <code>this</code>.
51 pnkfelix 1.1.2.8          <BR> <B>requires:</B> <code>this</code> has not already been
52 pnkfelix 1.1.2.8                                colored, unless <code>color</code> ==
53 pnkfelix 1.1.2.8                                null. 
54 pnkfelix 1.1.2.8          <BR> <B>effects:</B> Sets the color of <code>this</code> to
55 pnkfelix 1.1.2.8                               <code>color</code>.  If
56 pnkfelix 1.1.2.8                               <code>color</code> is <code>null</code>,
57 pnkfelix 1.1.2.8                               then <code>this</code> is given an
58 pnkfelix 1.1.2.8                               'uncolored' state. 
59 pnkfelix 1.1.2.1       */
60 pnkfelix 1.1.2.2      void setColor(Color color) throws NodeAlreadyColoredException {
61 pnkfelix 1.1.2.2          if (this.color != null && 
62 pnkfelix 1.1.2.2              color != null) {
63 pnkfelix 1.1.2.2              throw new NodeAlreadyColoredException
64 pnkfelix 1.1.2.2                  (this + " already has color " + this.color +
65 pnkfelix 1.1.2.2                   " and cannot be given color " + color);
66 pnkfelix 1.1.2.2          } else {
67 pnkfelix 1.1.2.2              this.color = color;
68 pnkfelix 1.1.2.2          }
69 pnkfelix 1.1.2.1      }
70 pnkfelix 1.1.2.1  
71 pnkfelix 1.1.2.1      /** Sets the hidden field of <code>this</code>
72 pnkfelix 1.1.2.8          <BR> <B>modifies:</B> <code>this</code>
73 pnkfelix 1.1.2.8          <BR> <B>effects:</B> Puts <code>this</code> into a 'hidden' state. 
74 pnkfelix 1.1.2.1      */
75 pnkfelix 1.1.2.4      void setHidden( boolean hide ) {
76 pnkfelix 1.1.2.8          // modifies: this.hiidden
77 pnkfelix 1.1.2.1          hidden = hide;
78 pnkfelix 1.1.2.1      }   
79 pnkfelix 1.1.2.1  
80 pnkfelix 1.1.2.1      /** Hidden field accessor.
81 pnkfelix 1.1.2.8          <BR> <B>effects:</B> returns true if <code>this</code> is in a
82 pnkfelix 1.1.2.8                               'hidden' state, false otherwise.
83 pnkfelix 1.1.2.1      */
84 pnkfelix 1.1.2.4      boolean isHidden() {
85 pnkfelix 1.1.2.1          return hidden;
86 pnkfelix 1.1.2.1      }   
87 pnkfelix 1.1.2.1  
88 cananian 1.2      }