/* Copyright (C) 2005 Tresys Technology, LLC * License: refer to COPYING file for license information. * Authors: Spencer Shimko * * PolicyElement.java: The reference policy base class * Version: @version@ */ package policy; import java.util.Map; import java.util.TreeMap; /** * Reference policy elements have certain similarties which * should be inherited from a base class. This includes a name * attribute that will be used for hashing, sorting, and converting * to a string. * * @see Layer * @see Module * @see Interface * @see Parameter */ public abstract class PolicyElement { /** the string identifying the element */ public final String Name; /** the parent component */ public final PolicyElement Parent; /** the attributes of this element */ private final Map attributes; public String PCDATA; /** * Default constructor assigns name. * * @param _name The name of the element. * @param _Parent The reference to the parent element. */ public PolicyElement(String _name, PolicyElement _Parent){ Name = _name; Parent = _Parent; attributes = new TreeMap(); } /** * Add attribute to policy element. * * @param aName String to identify attribute * @param aString Value of attribute identified by string aName * @return true when attribute added to element, * false when attribute already defined for element */ public boolean AddAttribute(String aName, String aString){ if (attributes.containsKey(aName)){ return false; } attributes.put(aName,aString); return true; } /** * Get attribute from policy element. * * @param aName String to identify attribute * @return String value associated with named attribute * or null if no attribute defined * for aName. */ public String GetAttribute(String aName){ return attributes.get(aName); } /** * Overridden equals method * * @param obj Object for comparison */ @Override public boolean equals(Object obj){ return obj.toString().equals(this.Name); } /** * Return a hashcode for the element. Currently implemented as a * call to the String hashCode() method. * * @return integer hashCode of this instance assuring two objects that * are == will return same hashcode. */ @Override public int hashCode() { return this.toString().hashCode(); } /** * Overridden toString() method. * * @return String representation of instance (it's name). */ @Override public String toString(){ return Name; } /** * Since Component might be used as a key in some type of sort Compare * is implemented. * * @return 0 if this==that, <0 if this0 if this>that * @see String.compareTo */ public int compareTo(Layer that){ return Name.compareTo(that.Name); } }