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 }