From: Anjo K. <an...@us...> - 2006-09-04 20:19:48
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv30732/ERExtensions/Sources/er/extensions Modified Files: ERXConstant.java ERXEntityClassDescription.java ERXJDBCAdaptor.java Log Message: added ERXConstant handling Index: ERXConstant.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXConstant.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ERXConstant.java 10 Aug 2005 08:00:17 -0000 1.8 --- ERXConstant.java 4 Sep 2006 20:19:42 -0000 1.9 *************** *** 8,21 **** import java.math.*; import com.webobjects.foundation.*; /** ! * Collection of base constants. Note that upon class initialization * 2500 Integers will be created and cached, from 0 - 2499. */ ! public class ERXConstant { public static final int MAX_INT=2500; protected static Integer[] INTEGERS=new Integer[MAX_INT]; static { --- 8,135 ---- import java.math.*; + import java.util.*; import com.webobjects.foundation.*; /** ! * Numerical contant class, usefull when you want reference object that are not ! * bytes or strings in the DB like what you get with the factory classes. ! * <pre><code> ! ! public abstract class Test extends ERXGenericRecord { ! ! public static class Status extends ERXConstant { ! private String _name; ! ! protected Status(int value, String name) { ! super(value); ! _name = name; ! } ! ! public String name() { ! return _name; ! } ! } ! ! public Status OFF = new Status(0, "Off"); ! public Status ON = new Status(1, "On"); ! ! public Test() { ! super(); ! } ! ! public Status status() { ! return (Status)storedValueForKey("status"); ! } ! ! public void setStatus(Constant aValue) { ! takeStoredValueForKey(aValue, "status"); ! } ! ! public boolean isOn() { ! return status() == ON; ! } ! } ! ! * </pre></code> ! * You need to add an entry <code>ERXConstantClassName</code> to the attribute in question ! * and your EO's class description needs to be a ERXEntityClassDescription. ! * <br /> ! * Note that upon class initialization * 2500 Integers will be created and cached, from 0 - 2499. */ ! public abstract class ERXConstant extends Number { ! ! private static final Map _store = new HashMap(); ! ! public static ERXConstant constantForClassNamed(int value, String clazzName) { ! return constantForClassNamed(integerForInt(value), clazzName); ! } ! ! public static ERXConstant constantForClassNamed(Number value, String clazzName) { ! synchronized (_store) { ! Map classMap = keyMap(clazzName, false); ! return (ERXConstant) classMap.get(value); ! } ! } ! ! private static Map keyMap(String name, boolean create) { ! Map map = (Map) _store.get(name); ! if(map == null) { ! if(create) { ! map = new HashMap(); ! } else { ! map = Collections.EMPTY_MAP; ! } ! } ! return map; ! } ! ! private int _value; ! ! protected ERXConstant(int value) { ! _value = value; ! synchronized (_store) { ! Map classMap = keyMap(getClass().getName(), true); ! Integer key = integerForInt(value); ! classMap.put(key, this); ! } ! } + public final double doubleValue() { + return intValue(); + } + + public final float floatValue() { + return intValue(); + } + + public final int intValue() { + return _value; + } + + public final long longValue() { + return intValue(); + } + + public final int hashCode() { + return _value; + } + + public final boolean equals(Object otherObject) { + if(otherObject == null) { + return false; + }/* AK: we would violate the equals contract here, but we may need this with D2W later? + if((otherObject instanceof Number) && !(otherObject instanceof ERXConstant)) { + return ((Number)otherObject).intValue() == intValue(); + }*/ + if(otherObject.getClass() != getClass()) { + return false; + } + return ((ERXConstant)otherObject).intValue() == intValue(); + } + public static final int MAX_INT=2500; + protected static Integer[] INTEGERS=new Integer[MAX_INT]; static { Index: ERXEntityClassDescription.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXEntityClassDescription.java,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** ERXEntityClassDescription.java 7 Jul 2006 18:57:07 -0000 1.52 --- ERXEntityClassDescription.java 4 Sep 2006 20:19:42 -0000 1.53 *************** *** 1175,1177 **** --- 1175,1190 ---- return sharedGSVEngineInstance; } + + public Class _enforcedKVCNumberClassForKey(String key) { + EOAttribute attribute = entity().attributeNamed(key); + if(attribute != null) { + String className = (String) attribute.userInfo().objectForKey("ERXConstantClassName"); + if(className != null) { + return ERXPatcher.classForName(className); + } + } + return super._enforcedKVCNumberClassForKey(key); + } + + } Index: ERXJDBCAdaptor.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXJDBCAdaptor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ERXJDBCAdaptor.java 7 Jul 2006 18:57:08 -0000 1.4 --- ERXJDBCAdaptor.java 4 Sep 2006 20:19:42 -0000 1.5 *************** *** 58,61 **** --- 58,73 ---- super(jdbccontext); } + + public void setAttributesToFetch(NSArray attributes) { + _attributes = attributes; + int j; + if (_attributes == null || (j = _attributes.count()) == 0) + return; + ERXJDBCColumn columns[] = new ERXJDBCColumn[j]; + for (int i = 0; i < j; i++) + columns[i] = new ERXJDBCColumn((EOAttribute) _attributes.objectAtIndex(i), this, i + 1, _resultSet); + + _selectedColumns = new NSArray(columns); + } private boolean setReadOnly(boolean mode) { |