diff options
| author | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
|---|---|---|
| committer | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
| commit | aedc34d55462a75e329bbf342251ff6504cd117e (patch) | |
| tree | bcc8f1f2352582717b484df302aeea6696b8f000 /projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java | |
Initial import from SVN
Diffstat (limited to 'projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java')
| -rw-r--r-- | projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java new file mode 100644 index 0000000..72a3dbc --- /dev/null +++ b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestObject.java @@ -0,0 +1,362 @@ +package net.wotonomy.test; + +import java.io.Serializable; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import java.util.StringTokenizer; + +import net.wotonomy.control.EOEditingContext; +import net.wotonomy.control.EOKeyValueCodingSupport; +import net.wotonomy.datastore.DataSoup; +import net.wotonomy.datastore.SerializedFileSoup; +import net.wotonomy.datastore.XMLFileSoup; +import net.wotonomy.foundation.internal.ValueConverter; + +public class TestObject implements Serializable // , EOKeyValueCoding +{ + static final long serialVersionUID = -5482454640042392838L; + +// for testing manual array faulting +public EOEditingContext editingContext; +public EOEditingContext getEditingContext() { return editingContext; }; + + public TestObject() + { + date = new Date(); + firstName = randomParse( + "Bert|Ernie|Elmo|Zoe|Arthur|Emily|DJ|Grover|Oscar|Max|Big|Twinkle"); + middleName = new StringBuffer( randomParse( + "Rufus|Remy|Martin|Josephus|Ulysses|Homer|Bart|Tip|Onegin|Meredith|Jay") ); + lastName = randomParse( + "Alejandro|Alexander|Bird|Gosling|Joy|Van Hoff|Pedia|Marr|McNealy|Ping"); + address = randomParse( "1|2|3|4" ) + randomParse( "0|1|00|10|5|50" ) + + randomParse( "0|00|1|01|5|05|9|09||000" ) + " " + randomParse( + "Merry|Berry|Perry|Jerry|Meadow|Falls|Elm|Raspberry|Strawberry") + " " + + randomParse( "Road|Lane|Court|Drive|Parkway|Terrace" ); + city = randomParse( + "Springfield|Sterling|Cascades|Vienna|Reston|Paris|London|Runnymeade"); + state = randomParse( + "TX|NJ|NY|VA|DC|MD|NC|SC|WV|AR|FL|CA|TN" ); + zip = ValueConverter.getIntValue( + randomParse( "1|2|3|4" ) + "0" + randomParse( "0|1|2|3|5" ) + + randomParse( "6|7|8|9" ) + randomParse( "6|7|8|9" ) ); + age = (short) ( new Random().nextDouble() * 40 + 18 ); + childCount = -1; +// children = null; + childList = null; + } + + protected Date date; + public Date getCreateDate() { return date; } + public void setCreateDate( Date aDate ) { date = aDate; } + + protected String firstName; + public String getFirstName() { return firstName; } + public void setFirstName( String aName ) { firstName = aName; } + + protected String lastName; + public String getLastName() { return lastName; } + public void setLastName( String aName ) { + if ( "Jones".equals( aName ) ) throw new RuntimeException( "Jones not allowed" ) ; + lastName = aName; + } + + protected StringBuffer middleName; + public StringBuffer getMiddleName() { return middleName; } + public void setMiddleName( StringBuffer aName ) { middleName = aName; } + + protected String address; + public String getAddress() { return address; } + public void setAddress( String anAddress ) { address = anAddress; } + + protected String city; + public String getCity() { return city; } + public void setCity( String aCity ) { city = aCity; } + + protected String state; + public String getState() { return state; } + public void setState( String aState ) { state = aState; } + + protected int zip; + public int getZipCode() { return zip; } + public void setZipCode( int aZipCode ) { zip = aZipCode; } + + protected short age; + public short getAge() { return age; } + public void setAge( short anAge ) { age = anAge; } + + protected boolean special; + public Boolean isSpecial() { return new Boolean( special ); } + public void setSpecial( Boolean isSpecial ) { special = isSpecial.booleanValue(); } + +/* + protected Object[] children; + + private Object[] getChildren() + { + if ( children == null ) + { + int n = getChildCount(); + children = new Object[ n ]; + for ( int i = 0; i < n; i++ ) + { + children[i] = new TestObject(); + } + //System.out.println( "TestObject.getChildren: " + toString() + " : " + getChildCount() ); + } + return children; + } + private void setChildren( Object[] aChildArray ) + { + children = aChildArray; + childCount = aChildArray.length; + } + + // following child list implementation wraps child array + + public List getChildList() + { + List result = new LinkedList(); + Object[] childArray = getChildren(); + for ( int i = 0; i < childArray.length; i++ ) + { + result.add( childArray[i] ); + } + return result; + } + public void setChildList( List aChildList ) + { + children = new Object[ aChildList.size() ]; + for ( int i = 0; i < children.length; i++ ) + { + children[i] = (TestObject) aChildList.get( i ); + } + childCount = children.length; + } +*/ + protected int childCount; + public int getChildCount() + { + if ( childCount == -1 ) + { +// uncomment this to enable random children +// childCount = (int) ( random.nextDouble() * 6 ) - 3; // + 100; // tree scalability test + if ( childCount < 0 ) childCount = 0; + } + +// this tests internal count +// return childCount; +// this tests deferred count + if ( childList != null ) + { + return childList.size(); + } + else + { + return 0; + } + }; + + // following child list implementation stands alone + + protected List childList; + public List getChildList() + { +/* + // this tests random child population + if ( childList == null ) + { + int n = getChildCount(); + childList = new LinkedList(); + for ( int i = 0; i < n; i++ ) + { + childList.add( new TestObject() ); + } + } +*/ + // this tests manual loading + if ( childList == null ) + { + childList = new LinkedList(); + } + return childList; + } + public void setChildList( List aChildList ) + { + childList = aChildList; + } + + protected TestObject parent; + public TestObject getParent() { return parent; } + public void setParent( TestObject anObject ) { parent = anObject; } + + public String getHash() { return Integer.toHexString( System.identityHashCode( this ) ); } + + public String getFullName() + { +// return getHash() + ": " + firstName + " " + middleName + " " + lastName; + return firstName + " " + middleName + " " + lastName; + } + + public boolean equals( Object anObject ) + { + return anObject == this; + } + + public String toString() + { + return "[" + getClass().getName() + + "@" + Integer.toHexString( System.identityHashCode(this) ) + + ":" + getFullName() + "]"; + } + + // statics + + private static Random random = new Random(); + private static String randomParse( String aString ) + { + String result = ""; + StringTokenizer tokens = new StringTokenizer( aString, "|" ); + int n = (int) ( random.nextDouble() * tokens.countTokens() ); + for ( int i = 0; i <= n; i++ ) + { + result = tokens.nextToken(); + } + return result; + } + + + // interface EOKeyValueCoding: + // disable this interface by commenting out the "implements" declaration + + /** + * Returns the value for the specified property. + * If the property does not exist, this method should + * call handleQueryWithUnboundKey. + */ + public Object valueForKey( String aKey ) + { + System.out.println( "valueForKey: " + aKey ); + return EOKeyValueCodingSupport.valueForKey( this, aKey ); + } + + /** + * Sets the property to the specified value. + * If the property does not exist, this method should + * call handleTakeValueForUnboundKey. + * If the property is of a type that cannot allow + * null (e.g. primitive types) and aValue is null, + * this method should call unableToSetNullForKey. + */ + public void takeValueForKey( Object aValue, String aKey ) + { + System.out.println( "takeValueForKey: " + aValue + " : " + aKey ); + EOKeyValueCodingSupport.takeValueForKey( this, aValue, aKey ); + } + + /** + * Returns the value for the private field that + * corresponds to the specified property. + */ + public Object storedValueForKey( String aKey ) + { + System.out.println( "storedValueForKey: " + aKey ); + return EOKeyValueCodingSupport.storedValueForKey( this, aKey ); + } + + /** + * Sets the the private field that corresponds to the + * specified property to the specified value. + */ + public void takeStoredValueForKey( Object aValue, String aKey ) + { + System.out.println( "takeStoredValueForKey: " + aValue + " : " + aKey ); + EOKeyValueCodingSupport.takeStoredValueForKey( this, aValue, aKey ); + } + + /** + * Called by valueForKey when the specified key is + * not found on this object. Implementing classes + * should handle the specified value or otherwise + * throw an exception. + */ + public Object handleQueryWithUnboundKey( String aKey ) + { + System.out.println( "handleQueryWithUnboundKey: " + aKey ); + return EOKeyValueCodingSupport.handleQueryWithUnboundKey( this, aKey ); + } + + /** + * Called by takeValueForKey when the specified key + * is not found on this object. Implementing classes + * should handle the specified value or otherwise + * throw an exception. + */ + public void handleTakeValueForUnboundKey( Object aValue, String aKey ) + { + System.out.println( "handleTakeValueForUnboundKey: " + aValue + " : " + aKey ); + EOKeyValueCodingSupport.handleTakeValueForUnboundKey( this, aValue, aKey ); + } + + /** + * Called by takeValueForKey when the type of the + * specified key is not allowed to be null, as is + * the case with primitive types. Implementing + * classes should handle this case appropriately + * or otherwise throw an exception. + */ + public void unableToSetNullForKey( String aKey ) + { + System.out.println( "unableToSetNullForKey: " + aKey ); + EOKeyValueCodingSupport.unableToSetNullForKey( this, aKey ); + } + + + // main entry point + + public static void main( String[] argv ) + { + int count = 100; + boolean xmlMode = false; + if ( argv.length > 0 ) + { + Integer parsed = ValueConverter.getInteger( argv[0] ); + if ( parsed != null ) count = parsed.intValue(); + + if ( argv.length > 1 ) + { + if ( argv[1].indexOf( "xml" ) > -1 ) + { + xmlMode = true; + } + } + } + +long millis = System.currentTimeMillis(); + + DataSoup store = null; + if ( xmlMode ) + { + store = new XMLFileSoup( "testObjects-xml" ); + } + else + { + store = new SerializedFileSoup( "testObjects-java" ); + } + + Object o; + for ( int i = 0; i < count; i++ ) + { + store.addObject( new TestObject() ); + } + /* + store.addIndex( "age", "age" ); + store.addIndex( "zipCode", "zipCode" ); + store.addIndex( "firstName", "firstName" ); + store.addIndex( "lastName", "lastName" ); +*/ +System.out.println( System.currentTimeMillis() - millis + " milliseconds" ); + } +} |
