Coverage Report - net.wotonomy.access.EOAttribute
 
Classes in this File Line Coverage Branch Coverage Complexity
EOAttribute
0% 
0% 
2.674
 
 1  
 /*
 2  
  Wotonomy: OpenStep design patterns for pure Java applications.
 3  
  Copyright (C) 2001 Michael Powers
 4  
 
 5  
  This library is free software; you can redistribute it and/or
 6  
  modify it under the terms of the GNU Lesser General Public
 7  
  License as published by the Free Software Foundation; either
 8  
  version 2.1 of the License, or (at your option) any later version.
 9  
 
 10  
  This library is distributed in the hope that it will be useful,
 11  
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13  
  Lesser General Public License for more details.
 14  
 
 15  
  You should have received a copy of the GNU Lesser General Public
 16  
  License along with this library; if not, see http://www.gnu.org
 17  
  */
 18  
 package net.wotonomy.access;
 19  
 
 20  
 import net.wotonomy.foundation.NSDictionary;
 21  
 import net.wotonomy.foundation.NSMutableDictionary;
 22  
 import net.wotonomy.foundation.NSSelector;
 23  
 
 24  
 /**
 25  
 * Represents an attribute inside an entity. Contains mapping data for
 26  
 * the attribute's external name, external and internal datatypes, etc.
 27  
 * It can also represent a flattened or derived attribute, or a prototype;
 28  
 * and they are also used to represent parameters in a stored procedure.
 29  
 *
 30  
 * @author ezamudio@nasoft.com
 31  
 * @author $Author: cgruber $
 32  
 * @version $Revision: 894 $
 33  
 */
 34  
 public class EOAttribute extends EOProperty implements EOPropertyListEncoding {
 35  
 
 36  
         //These are used for stored procedure parameters.
 37  
         public static final int Void = 0;
 38  
         public static final int InParameter = 1;
 39  
         public static final int OutParameter = 2;
 40  
         public static final int InOutParameter = 3;
 41  
 
 42  
         protected EOEntity _entity;
 43  
         protected String _name;
 44  
         protected String _columnName;
 45  
         protected String _definition;
 46  
         protected String _className;
 47  
         protected String _externalType;
 48  
         protected Class _valueClass;
 49  
         protected String _valueClassName;
 50  
         protected String _valueType;
 51  
         protected String _valueFactoryMethodName;
 52  
         protected String _readFormat;
 53  
         protected String _writeFormat;
 54  
         protected String _prototypeName;
 55  
         protected EOAttribute _prototype;
 56  
         protected NSSelector _valueFactoryMethod;
 57  
         protected boolean _allowsNull;
 58  
         protected boolean _readOnly;
 59  
         protected boolean _isFlattened;
 60  
         protected boolean _knowsIfFlattened;
 61  
         protected int _precision;
 62  
         protected int _scale;
 63  
         protected int _width;
 64  
         protected int _parameterDirection;
 65  
         protected NSDictionary _internalInfo;
 66  
         protected NSDictionary _userInfo;
 67  
 
 68  
         protected boolean _has_allowsNull;
 69  
 
 70  
         public EOAttribute() {
 71  0
                 super();
 72  0
                 _allowsNull = true;
 73  0
         }
 74  
 
 75  
         public EOAttribute(NSDictionary dict, Object obj) {
 76  0
                 super();
 77  0
                 if (obj instanceof EOEntity)
 78  0
                         _entity = (EOEntity)obj;
 79  0
                 setName((String)dict.objectForKey("name"));
 80  0
                 if (dict.objectForKey("columnName") != null)
 81  0
                         setColumnName((String)dict.objectForKey("columnName"));
 82  0
                 if (dict.objectForKey("definition") != null)
 83  0
                         setDefinition((String)dict.objectForKey("definition"));
 84  0
                 _prototypeName = (String)dict.objectForKey("prototypeName");
 85  0
                 setExternalType((String)dict.objectForKey("externalType"));
 86  0
                 setClassName((String)dict.objectForKey("valueClassName"));
 87  0
                 setValueType((String)dict.objectForKey("valueType"));
 88  0
                 _writeFormat = (String)dict.objectForKey("writeFormat");
 89  0
                 _readFormat = (String)dict.objectForKey("readFormat");
 90  0
                 if (dict.objectForKey("precision") != null)
 91  0
                         setPrecision(Integer.parseInt((String)dict.objectForKey("precision")));
 92  0
                 if (dict.objectForKey("scale") != null)
 93  0
                         setScale(Integer.parseInt((String)dict.objectForKey("scale")));
 94  0
                 if (dict.objectForKey("width") != null)
 95  0
                         setWidth(Integer.parseInt((String)dict.objectForKey("width")));
 96  0
                 if (dict.objectForKey("parameterDirection") != null)
 97  0
                         setParameterDirection(Integer.parseInt((String)dict.objectForKey("parameterDirection")));
 98  0
                 setAllowsNull("Y".equals(dict.objectForKey("allowsNull")));
 99  0
         }
 100  
 
 101  
         void setEntity(EOEntity value) {
 102  0
                 _entity = value;
 103  0
         }
 104  
 
 105  
         public void setName(String name) {
 106  0
                 _name = name;
 107  0
         }
 108  
         public String name() {
 109  0
                 return _name;
 110  
         }
 111  
 
 112  
         public void setColumnName(String name) {
 113  0
                 _columnName = name;
 114  0
         }
 115  
         public String columnName() {
 116  0
                 if (_columnName != null)
 117  0
                         return _columnName;
 118  0
                 if (prototype() != null)
 119  0
                         if (_prototype.columnName() != null)
 120  0
                                 return _prototype.columnName();
 121  0
                 return null;
 122  
         }
 123  
 
 124  
         public void setClassName(String name) {
 125  0
                 _className = name;
 126  0
         }
 127  
         public String className() {
 128  0
                 if (_className != null)
 129  0
                         return _className;
 130  0
                 if (prototype() != null)
 131  0
                         if (_prototype.className() != null)
 132  0
                                 return _prototype.className();
 133  0
                 return null;
 134  
         }
 135  
 
 136  
         public void setDefinition(String def) {
 137  0
                 _definition = def;
 138  0
                 _columnName = null;
 139  0
         }
 140  
         public String definition() {
 141  0
                 if (_definition != null)
 142  0
                         return _definition;
 143  0
                 if (prototype() != null)
 144  0
                         if (_prototype.definition() != null)
 145  0
                                 return _prototype.definition();
 146  0
                 return null;
 147  
         }
 148  
 
 149  
         public void setExternalType(String type) {
 150  0
                 _externalType = type;
 151  0
         }
 152  
         public String externalType() {
 153  0
                 if (_externalType != null)
 154  0
                         return _externalType;
 155  0
                 if (prototype() != null)
 156  0
                         if (_prototype.externalType() != null)
 157  0
                                 return _prototype.externalType();
 158  0
                 return null;
 159  
         }
 160  
 
 161  
         public void setAllowsNull(boolean flag) {
 162  0
                 _allowsNull = flag;
 163  0
                 _has_allowsNull = true;
 164  0
         }
 165  
         public boolean allowsNull() {
 166  0
                 if (_has_allowsNull)
 167  0
                         return _allowsNull;
 168  0
                 if (prototype() != null)
 169  0
                         return _prototype.allowsNull();
 170  0
                 return _allowsNull;
 171  
         }
 172  
 
 173  
         public void setReadOnly(boolean flag) {
 174  0
                 _readOnly = flag;
 175  0
         }
 176  
         public boolean readOnly() {
 177  0
                 return _readOnly;
 178  
         }
 179  
 
 180  
         public void setPrototype(EOAttribute proto) {
 181  0
                 _prototype = proto;
 182  0
                 if (proto != null)
 183  0
                         _prototypeName = proto.name();
 184  
                 else
 185  0
                         _prototypeName = null;
 186  0
         }
 187  
         public EOAttribute prototype() {
 188  0
                 if (_prototypeName != null && _prototype == null) {
 189  
                         try {
 190  0
                                 EOModel m = _entity.model();
 191  0
                                 EOModelGroup g = m.modelGroup();
 192  0
                                 EOEntity protos = g.entityNamed("EO" + m.adaptorName() + "Prototypes");
 193  0
                                 if (protos == null)
 194  0
                                         protos = g.entityNamed("EOPrototypes");
 195  0
                                 _prototype = protos.attributeNamed(_prototypeName);
 196  0
                         } catch (NullPointerException e) {
 197  0
                         }
 198  
                 }
 199  0
                 return _prototype;
 200  
         }
 201  
 
 202  
         public void setPrecision(int value) {
 203  0
                 _precision = value;
 204  0
         }
 205  
         public int precision() {
 206  0
                 if (_precision > 0)
 207  0
                         return _precision;
 208  0
                 if (prototype() != null)
 209  0
                         return _prototype.precision();
 210  0
                 return _precision;
 211  
         }
 212  
 
 213  
         public void setScale(int value) {
 214  0
                 _scale = value;
 215  0
         }
 216  
         public int scale() {
 217  0
                 if (_scale > 0)
 218  0
                         return _scale;
 219  0
                 if (prototype() != null)
 220  0
                         return _prototype.scale();
 221  0
                 return _scale;
 222  
         }
 223  
 
 224  
         public void setWidth(int value) {
 225  0
                 _width = value;
 226  0
         }
 227  
         public int width() {
 228  0
                 if (_width > 0)
 229  0
                         return _width;
 230  0
                 if  (prototype() != null)
 231  0
                         return _prototype.width();
 232  0
                 return _width;
 233  
         }
 234  
 
 235  
         /** @deprecated Use setClassName instead. */
 236  
         public void setValueClassName(String name) {
 237  0
                 setClassName(name);
 238  0
         }
 239  
         /** @deprecated Use className() instead. */
 240  
         public String valueClassName() {
 241  0
                 return className();
 242  
         }
 243  
 
 244  
         public void setValueType(String type) {
 245  0
                 _valueType = type;
 246  0
         }
 247  
         public String valueType() {
 248  0
                 if (_valueType != null)
 249  0
                         return _valueType;
 250  0
                 if (prototype() != null)
 251  0
                         return _prototype.valueType();
 252  0
                 return null;
 253  
         }
 254  
 
 255  
         public void setReadFormat(String value) {
 256  0
                 _readFormat = value;
 257  0
         }
 258  
         public String readFormat() {
 259  0
                 return _readFormat;
 260  
         }
 261  
 
 262  
         public void setWriteFormat(String value) {
 263  0
                 _writeFormat = value;
 264  0
         }
 265  
         public String writeFormat() {
 266  0
                 return _writeFormat;
 267  
         }
 268  
 
 269  
         public boolean isDerived() {
 270  0
                 return (definition() != null);
 271  
         }
 272  
 
 273  
         /** Determines whether the receiver is a flattened attribute.
 274  
          * A flattened attribute has as its definition a relationship
 275  
          * path that can be resolved to an attribute.
 276  
          * @return true if the receiver is flattened.
 277  
          */
 278  
         public boolean isFlattened() {
 279  0
                 if (_knowsIfFlattened)
 280  0
                         return _isFlattened;
 281  0
                 _knowsIfFlattened = true;
 282  0
                 if (definition() == null)
 283  0
                         return false;
 284  0
                 _isFlattened = (entity()._attributeForPath(definition()) != null);
 285  0
                 return _isFlattened;
 286  
         }
 287  
 
 288  
         public EOEntity entity() {
 289  0
                 return _entity;
 290  
         }
 291  
 
 292  
         public void setParameterDirection(int dir) {
 293  0
                 _parameterDirection = dir;
 294  0
         }
 295  
         public int parameterDirection() {
 296  0
                 return _parameterDirection;
 297  
         }
 298  
 
 299  
         public String relationshipPath() {
 300  0
                 if (isFlattened())
 301  0
                         return definition();
 302  0
                 return null;
 303  
         }
 304  
 
 305  
         public void setUserInfo(NSDictionary value) {
 306  0
                 _userInfo = value;
 307  0
         }
 308  
         public NSDictionary userInfo() {
 309  0
                 return _userInfo;
 310  
         }
 311  
 
 312  
         public void awakeWithPropertyList(NSDictionary plist) {
 313  0
         }
 314  
 
 315  
         public void encodeIntoPropertyList(NSMutableDictionary dict) {
 316  0
                 dict.setObjectForKey(name(), "name");
 317  0
                 if (_prototypeName != null)
 318  0
                         dict.setObjectForKey(_prototypeName, "prototypeName");
 319  0
                 if (_columnName != null)
 320  0
                         dict.setObjectForKey(_columnName, "columnName");
 321  0
                 if (_definition != null)
 322  0
                         dict.setObjectForKey(_definition, "definition");
 323  0
                 if (_className != null)
 324  0
                         dict.setObjectForKey(_className, "valueClassName");
 325  0
                 if (_valueType != null)
 326  0
                         dict.setObjectForKey(_valueType, "valueType");
 327  0
                 if (_precision > 0)
 328  0
                         dict.setObjectForKey(new Integer(_precision), "precision");
 329  0
                 if (_scale > 0)
 330  0
                         dict.setObjectForKey(new Integer(_scale), "scale");
 331  0
                 if (_width > 0)
 332  0
                         dict.setObjectForKey(new Integer(_width), "width");
 333  0
                 if (_externalType != null)
 334  0
                         dict.setObjectForKey(_externalType, "externalType");
 335  0
                 if (_readFormat != null)
 336  0
                         dict.setObjectForKey(_readFormat, "readFormat");
 337  0
                 if (_writeFormat != null)
 338  0
                         dict.setObjectForKey(_writeFormat, "writeFormat");
 339  0
                 if (_allowsNull)
 340  0
                         dict.setObjectForKey("Y", "allowsNull");
 341  0
                 if (_entity == null)
 342  0
                         dict.setObjectForKey(new Integer(parameterDirection()), "parameterDirection");
 343  0
                 if (userInfo() != null && userInfo().count() > 0)
 344  0
                         dict.setObjectForKey(userInfo(), "userInfo");
 345  0
                 if (_internalInfo != null && _internalInfo.count() > 0)
 346  0
                         dict.setObjectForKey(_internalInfo, "internalInfo");
 347  0
         }
 348  
 
 349  
 }
 350  
 /*
 351  
  * $Log$
 352  
  * Revision 1.2  2006/02/16 16:47:13  cgruber
 353  
  * Move some classes in to "internal" packages and re-work imports, etc.
 354  
  *
 355  
  * Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions.
 356  
  *
 357  
  * Revision 1.1  2006/02/16 13:19:57  cgruber
 358  
  * Check in all sources in eclipse-friendly maven-enabled packages.
 359  
  *
 360  
  * Revision 1.7  2003/08/14 02:13:56  chochos
 361  
  * implement and use _attributeForPath()
 362  
  *
 363  
  * Revision 1.6  2003/08/12 01:45:04  chochos
 364  
  * added some code to handle prototypes
 365  
  *
 366  
  * Revision 1.5  2003/08/11 19:38:27  chochos
 367  
  * Can now read from a file and re-write to another file.
 368  
  *
 369  
  * Revision 1.4  2003/08/09 01:35:35  chochos
 370  
  * implement EOPropertyListEncoding
 371  
  *
 372  
  * Revision 1.3  2003/08/08 06:52:09  chochos
 373  
  * isFlattened() works
 374  
  *
 375  
  * Revision 1.2  2003/08/08 02:15:03  chochos
 376  
  * added parameterDirection (for use with stored procedures)
 377  
  *
 378  
  * Revision 1.1  2003/08/07 02:39:45  chochos
 379  
  * EOAttribute. Can be initialized from a property list.
 380  
  *
 381  
 */