api/core/src/org/proteios/AttributeDefinition.java

Code
Comments
Other
Rev Date Author Line
2413 21 Nov 07 gregory 1 /*
2413 21 Nov 07 gregory 2  $Id: code_templates.xml 1916 2007-08-31 09:54:00Z jari $
2413 21 Nov 07 gregory 3  
2413 21 Nov 07 gregory 4  Copyright (C) 2006, 2007 Gregory Vincic
2413 21 Nov 07 gregory 5  
2413 21 Nov 07 gregory 6  Files are copyright by their respective authors. The contributions to
2413 21 Nov 07 gregory 7  files where copyright is not explicitly stated can be traced with the
2413 21 Nov 07 gregory 8  source code revision system.
2413 21 Nov 07 gregory 9  
2413 21 Nov 07 gregory 10  This file is part of Proteios.
2413 21 Nov 07 gregory 11  Available at http://www.proteios.org/
2413 21 Nov 07 gregory 12  
2413 21 Nov 07 gregory 13  Proteios is free software; you can redistribute it and/or
2413 21 Nov 07 gregory 14  modify it under the terms of the GNU General Public License
2413 21 Nov 07 gregory 15  as published by the Free Software Foundation; either version 2
2413 21 Nov 07 gregory 16  of the License, or (at your option) any later version.
2413 21 Nov 07 gregory 17  
2413 21 Nov 07 gregory 18  Proteios is distributed in the hope that it will be useful,
2413 21 Nov 07 gregory 19  but WITHOUT ANY WARRANTY; without even the implied warranty of
2413 21 Nov 07 gregory 20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2413 21 Nov 07 gregory 21  GNU General Public License for more details.
2413 21 Nov 07 gregory 22  
2413 21 Nov 07 gregory 23  You should have received a copy of the GNU General Public License
2413 21 Nov 07 gregory 24  along with this program; if not, write to the Free Software
2413 21 Nov 07 gregory 25  Foundation, Inc., 59 Temple Place - Suite 330,
2413 21 Nov 07 gregory 26  Boston, MA  02111-1307, USA.
2413 21 Nov 07 gregory 27  */
2413 21 Nov 07 gregory 28 package org.proteios;
2413 21 Nov 07 gregory 29
2463 14 Dec 07 gregory 30 import org.proteios.props.AttributeReader;
2463 14 Dec 07 gregory 31
2413 21 Nov 07 gregory 32 /**
2413 21 Nov 07 gregory 33  * An attribute is defined by it's set and get methods. This class defines such
2413 21 Nov 07 gregory 34  * attributes. E.g. a String attribute 'name' would be defined as
2413 21 Nov 07 gregory 35  * 
2413 21 Nov 07 gregory 36  * <pre>
2413 21 Nov 07 gregory 37  * AttributeDefinition nameA = new AttributeDefinition(String.class, &quot;Name&quot;);
2413 21 Nov 07 gregory 38  * </pre>
2413 21 Nov 07 gregory 39  * 
2413 21 Nov 07 gregory 40  * a boolean attribute would look like
2413 21 Nov 07 gregory 41  * 
2413 21 Nov 07 gregory 42  * <pre>
2444 10 Dec 07 gregory 43  * AttributeDefinition hiddenA = new AttributeDefinition(Boolean.class, &quot;Hidden&quot;,
2444 10 Dec 07 gregory 44  *   &quot;is&quot;, &quot;set&quot;);
2413 21 Nov 07 gregory 45  * </pre>
2413 21 Nov 07 gregory 46  * 
2413 21 Nov 07 gregory 47  * meaning that the attribute Hidden is accessible through isHidden() and
2413 21 Nov 07 gregory 48  * setHidden(Boolean) methods.
2413 21 Nov 07 gregory 49  * 
2413 21 Nov 07 gregory 50  * @author gregory
2413 21 Nov 07 gregory 51  * @see ClassDescriptor
2413 21 Nov 07 gregory 52  */
2413 21 Nov 07 gregory 53 public class AttributeDefinition
2413 21 Nov 07 gregory 54 {
2413 21 Nov 07 gregory 55   /**
2449 11 Dec 07 gregory 56    * The class this attribute is part of, cannot be null.
2449 11 Dec 07 gregory 57    */
2449 11 Dec 07 gregory 58   private Class describedClass;
2449 11 Dec 07 gregory 59   /**
2413 21 Nov 07 gregory 60    * Defines the value type, cannot be null.
2413 21 Nov 07 gregory 61    */
2413 21 Nov 07 gregory 62   private Class type;
2413 21 Nov 07 gregory 63   /**
2413 21 Nov 07 gregory 64    * Key identifying this attribute.
2413 21 Nov 07 gregory 65    */
2413 21 Nov 07 gregory 66   private String key;
2413 21 Nov 07 gregory 67   /**
2413 21 Nov 07 gregory 68    * Prefix used to identifying the method reading this attribute. E.g. for
2413 21 Nov 07 gregory 69    * the String attribute 'Name' the prefix would be 'get' resulting in the
2413 21 Nov 07 gregory 70    * method getName
2413 21 Nov 07 gregory 71    */
2413 21 Nov 07 gregory 72   private String readPrefix = null;
2413 21 Nov 07 gregory 73   private String writePrefix = null;
2463 14 Dec 07 gregory 74   /**
2463 14 Dec 07 gregory 75    * Reads an attribute from the value type of this attribute definition
2463 14 Dec 07 gregory 76    */
2463 14 Dec 07 gregory 77   private AttributeReader reader = null;
2413 21 Nov 07 gregory 78
2413 21 Nov 07 gregory 79
2413 21 Nov 07 gregory 80   /**
2413 21 Nov 07 gregory 81    * Creates a method key where read prefix is 'get' and write prefix is 'set'
2413 21 Nov 07 gregory 82    * 
2449 11 Dec 07 gregory 83    * @param describedClass
2413 21 Nov 07 gregory 84    * @param type of this attribute value
2413 21 Nov 07 gregory 85    * @param key identifying this attribute
2413 21 Nov 07 gregory 86    */
2449 11 Dec 07 gregory 87   public AttributeDefinition(Class describedClass, Class type, String key)
2413 21 Nov 07 gregory 88   {
2449 11 Dec 07 gregory 89     this.describedClass = describedClass;
2413 21 Nov 07 gregory 90     this.type = type;
2413 21 Nov 07 gregory 91     this.key = key;
2413 21 Nov 07 gregory 92     this.readPrefix = "get";
2413 21 Nov 07 gregory 93     this.writePrefix = "set";
2413 21 Nov 07 gregory 94   }
2413 21 Nov 07 gregory 95
2413 21 Nov 07 gregory 96
2413 21 Nov 07 gregory 97   /**
2463 14 Dec 07 gregory 98    * Creates a method key where read prefix is 'get' and write prefix is 'set'
2463 14 Dec 07 gregory 99    * with an attribute reader that reads a value from this attribute type.
2463 14 Dec 07 gregory 100    * 
2449 11 Dec 07 gregory 101    * @param describedClass
2413 21 Nov 07 gregory 102    * @param type of this attribute value
2413 21 Nov 07 gregory 103    * @param key identifying this attribute
2463 14 Dec 07 gregory 104    * @param reader the reader that reads an attribute from this attribute e.g.
2463 14 Dec 07 gregory 105    *        the name of a Nameable type
2463 14 Dec 07 gregory 106    */
2463 14 Dec 07 gregory 107   public AttributeDefinition(Class describedClass, Class type, String key,
2463 14 Dec 07 gregory 108       AttributeReader reader)
2463 14 Dec 07 gregory 109   {
2463 14 Dec 07 gregory 110     this.describedClass = describedClass;
2463 14 Dec 07 gregory 111     this.type = type;
2463 14 Dec 07 gregory 112     this.key = key;
2463 14 Dec 07 gregory 113     this.readPrefix = "get";
2463 14 Dec 07 gregory 114     this.writePrefix = "set";
2463 14 Dec 07 gregory 115     this.reader = reader;
2463 14 Dec 07 gregory 116   }
2463 14 Dec 07 gregory 117
2463 14 Dec 07 gregory 118
2463 14 Dec 07 gregory 119   /**
2463 14 Dec 07 gregory 120    * @param describedClass
2463 14 Dec 07 gregory 121    * @param type of this attribute value
2463 14 Dec 07 gregory 122    * @param key identifying this attribute
2413 21 Nov 07 gregory 123    * @param readPrefix e.g. 'get' or 'is' for boolean values
2413 21 Nov 07 gregory 124    * @param writePrefix e.g. 'set'
2413 21 Nov 07 gregory 125    */
2449 11 Dec 07 gregory 126   public AttributeDefinition(Class describedClass, Class type, String key,
2449 11 Dec 07 gregory 127       String readPrefix, String writePrefix)
2413 21 Nov 07 gregory 128   {
2449 11 Dec 07 gregory 129     this.describedClass = describedClass;
2413 21 Nov 07 gregory 130     this.type = type;
2413 21 Nov 07 gregory 131     this.key = key;
2413 21 Nov 07 gregory 132     this.readPrefix = readPrefix;
2413 21 Nov 07 gregory 133     this.writePrefix = writePrefix;
2413 21 Nov 07 gregory 134   }
2413 21 Nov 07 gregory 135
2413 21 Nov 07 gregory 136
2413 21 Nov 07 gregory 137   /**
2413 21 Nov 07 gregory 138    * @return the key identifying this attribute
2413 21 Nov 07 gregory 139    */
2413 21 Nov 07 gregory 140   public String getKey()
2413 21 Nov 07 gregory 141   {
2413 21 Nov 07 gregory 142     return key;
2413 21 Nov 07 gregory 143   }
2413 21 Nov 07 gregory 144
2413 21 Nov 07 gregory 145
2413 21 Nov 07 gregory 146   /**
2413 21 Nov 07 gregory 147    * @return concatenated string of readPrefix and key
2413 21 Nov 07 gregory 148    */
2413 21 Nov 07 gregory 149   public String getReadMethodName()
2413 21 Nov 07 gregory 150   {
2413 21 Nov 07 gregory 151     return readPrefix + getKey();
2413 21 Nov 07 gregory 152   }
2413 21 Nov 07 gregory 153
2413 21 Nov 07 gregory 154
2413 21 Nov 07 gregory 155   /**
2413 21 Nov 07 gregory 156    * @return concatenated string of writePrefix and key
2413 21 Nov 07 gregory 157    */
2413 21 Nov 07 gregory 158   public String getWriteMethodName()
2413 21 Nov 07 gregory 159   {
2413 21 Nov 07 gregory 160     return writePrefix + getKey();
2413 21 Nov 07 gregory 161   }
2413 21 Nov 07 gregory 162
2413 21 Nov 07 gregory 163
2413 21 Nov 07 gregory 164   public Class getAttributeType()
2413 21 Nov 07 gregory 165   {
2413 21 Nov 07 gregory 166     return type;
2413 21 Nov 07 gregory 167   }
2413 21 Nov 07 gregory 168
2413 21 Nov 07 gregory 169
2413 21 Nov 07 gregory 170   /**
2413 21 Nov 07 gregory 171    * A defined attribute is equal to another if the keys are the same.
2413 21 Nov 07 gregory 172    */
2413 21 Nov 07 gregory 173   @Override
2413 21 Nov 07 gregory 174   public boolean equals(Object obj)
2413 21 Nov 07 gregory 175   {
2413 21 Nov 07 gregory 176     AttributeDefinition atr = (AttributeDefinition) obj;
2413 21 Nov 07 gregory 177     return atr.getKey().equals(getKey());
2413 21 Nov 07 gregory 178   }
2444 10 Dec 07 gregory 179
2444 10 Dec 07 gregory 180
2444 10 Dec 07 gregory 181   @Override
2444 10 Dec 07 gregory 182   public int hashCode()
2444 10 Dec 07 gregory 183   {
2444 10 Dec 07 gregory 184     return getKey().hashCode();
2444 10 Dec 07 gregory 185   }
2444 10 Dec 07 gregory 186
2444 10 Dec 07 gregory 187
2444 10 Dec 07 gregory 188   @Override
2444 10 Dec 07 gregory 189   public String toString()
2444 10 Dec 07 gregory 190   {
2444 10 Dec 07 gregory 191     return getKey();
2444 10 Dec 07 gregory 192   }
2449 11 Dec 07 gregory 193
2449 11 Dec 07 gregory 194
2449 11 Dec 07 gregory 195   public Class getDescribedClass()
2449 11 Dec 07 gregory 196   {
2449 11 Dec 07 gregory 197     return describedClass;
2449 11 Dec 07 gregory 198   }
2463 14 Dec 07 gregory 199
2463 14 Dec 07 gregory 200
2463 14 Dec 07 gregory 201   public AttributeReader getReader()
2463 14 Dec 07 gregory 202   {
2463 14 Dec 07 gregory 203     return reader;
2463 14 Dec 07 gregory 204   }
2413 21 Nov 07 gregory 205 }