You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by aw...@apache.org on 2006/12/08 19:32:10 UTC
svn commit: r484693 [1/3] - in /incubator/openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-kernel/src/main/java/org/apache/openjpa/util/
openjpa-kernel/src/ma...
Author: awhite
Date: Fri Dec 8 10:32:07 2006
New Revision: 484693
URL: http://svn.apache.org/viewvc?view=rev&rev=484693
Log:
Move to dynamically-created bytecode proxies for second class objects, rather
than checked-in proxy classes. This allows us to proxy custom collection,
map, and bean types.
Added:
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyBean.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollections.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyMaps.java
incubator/openjpa/trunk/openjpa-kernel/src/test/java/org/apache/openjpa/util/
incubator/openjpa/trunk/openjpa-kernel/src/test/java/org/apache/openjpa/util/TestProxyManager.java
Removed:
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyArrayList.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyGregorianCalendar.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyHashMap.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyHashSet.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyHashtable.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyLinkedList.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyProperties.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxySQLDate.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyTime.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyTimestamp.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyTreeMap.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyTreeSet.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyUtilDate.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyVector.java
Modified:
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyCollection.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyMap.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MapTableFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionInverseKeyFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionTableFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyCollection.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyMap.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/CollectionChangeTrackerImpl.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/MapChangeTrackerImpl.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxy.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCalendar.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollection.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyDate.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyMap.java
incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/util/localizer.properties
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyCollection.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyCollection.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyCollection.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyCollection.java Fri Dec 8 10:32:07 2006
@@ -19,7 +19,6 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCStore;
import org.apache.openjpa.jdbc.meta.ClassMapping;
@@ -50,10 +49,9 @@
private final LRSCollectionFieldStrategy _strat;
- public LRSProxyCollection(LRSCollectionFieldStrategy strat,
- OpenJPAConfiguration conf) {
+ public LRSProxyCollection(LRSCollectionFieldStrategy strat) {
super(strat.getFieldMapping().getElement().getDeclaredType(),
- strat.getFieldMapping().getOrderColumn() != null, conf);
+ strat.getFieldMapping().getOrderColumn() != null);
_strat = strat;
}
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyMap.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyMap.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyMap.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/LRSProxyMap.java Fri Dec 8 10:32:07 2006
@@ -23,7 +23,6 @@
import java.util.Map;
import java.util.NoSuchElementException;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCStore;
import org.apache.openjpa.jdbc.meta.ClassMapping;
@@ -53,9 +52,9 @@
private final LRSMapFieldStrategy _strat;
- public LRSProxyMap(LRSMapFieldStrategy strat, OpenJPAConfiguration conf) {
+ public LRSProxyMap(LRSMapFieldStrategy strat) {
super(strat.getFieldMapping().getKey().getDeclaredType(),
- strat.getFieldMapping().getElement().getDeclaredType(), conf);
+ strat.getFieldMapping().getElement().getDeclaredType());
_strat = strat;
}
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MapTableFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MapTableFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MapTableFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MapTableFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -116,8 +116,7 @@
JDBCFetchConfiguration fetch)
throws SQLException {
if (field.isLRS()) {
- sm.storeObjectField(field.getIndex(), new LRSProxyMap(this,
- store.getConfiguration()));
+ sm.storeObjectField(field.getIndex(), new LRSProxyMap(this));
return;
}
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionInverseKeyFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionInverseKeyFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionInverseKeyFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionInverseKeyFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -81,8 +81,8 @@
return super.joinElementRelation(joins, elem);
}
- protected Proxy newLRSProxy(OpenJPAConfiguration conf) {
- return new LRSProxyCollection(this, conf);
+ protected Proxy newLRSProxy() {
+ return new LRSProxyCollection(this);
}
public void map(boolean adapt) {
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionTableFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionTableFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionTableFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationCollectionTableFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -80,8 +80,8 @@
return super.joinElementRelation(joins, elem);
}
- protected Proxy newLRSProxy(OpenJPAConfiguration conf) {
- return new LRSProxyCollection(this, conf);
+ protected Proxy newLRSProxy() {
+ return new LRSProxyCollection(this);
}
public void map(boolean adapt) {
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -140,8 +140,8 @@
return joinElementRelation(joins, val);
}
- protected Proxy newLRSProxy(OpenJPAConfiguration conf) {
- return new LRSProxyMap(this, conf);
+ protected Proxy newLRSProxy() {
+ return new LRSProxyMap(this);
}
protected void add(JDBCStore store, Object coll, Object obj) {
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -140,8 +140,8 @@
return joinElementRelation(joins, val);
}
- protected Proxy newLRSProxy(OpenJPAConfiguration conf) {
- return new LRSProxyMap(this, conf);
+ protected Proxy newLRSProxy() {
+ return new LRSProxyMap(this);
}
protected void add(JDBCStore store, Object coll, Object obj) {
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java Fri Dec 8 10:32:07 2006
@@ -96,7 +96,7 @@
/**
* Return a large result set proxy for this field.
*/
- protected abstract Proxy newLRSProxy(OpenJPAConfiguration conf);
+ protected abstract Proxy newLRSProxy();
/**
* Convert the field value to a collection. Handles collections and
@@ -409,7 +409,7 @@
final JDBCFetchConfiguration fetch)
throws SQLException {
if (field.isLRS()) {
- Proxy coll = newLRSProxy(store.getConfiguration());
+ Proxy coll = newLRSProxy();
// if this is ordered we need to know the next seq to use in case
// objects are added to the collection
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java Fri Dec 8 10:32:07 2006
@@ -123,6 +123,7 @@
proxy = getProxyManager().newCustomProxy(objval);
ret = proxy != null;
}
+ break;
}
if (proxy != null) {
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractChangeTracker.java Fri Dec 8 10:32:07 2006
@@ -18,9 +18,9 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
+import java.util.IdentityHashMap;
import java.util.Set;
-import org.apache.commons.collections.map.IdentityMap;
import org.apache.commons.collections.set.MapBackedSet;
/**
@@ -184,7 +184,7 @@
*/
protected Set newSet() {
if (_identity == Boolean.TRUE)
- return MapBackedSet.decorate(new IdentityMap());
+ return MapBackedSet.decorate(new IdentityHashMap());
return new HashSet();
}
@@ -218,14 +218,14 @@
if (identity && cur instanceof HashSet) {
if (cur.isEmpty())
return null;
- Set replace = MapBackedSet.decorate(new IdentityMap());
+ Set replace = MapBackedSet.decorate(new IdentityHashMap());
replace.addAll(cur);
return replace;
}
if (!identity && !(cur instanceof HashSet) && cur instanceof Set) {
if (cur.isEmpty())
return null;
- return new HashSet (cur);
+ return new HashSet(cur);
}
return cur;
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyCollection.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyCollection.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyCollection.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyCollection.java Fri Dec 8 10:32:07 2006
@@ -26,7 +26,6 @@
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.commons.collections.iterators.IteratorChain;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.lib.util.Closeable;
import org.apache.openjpa.lib.util.Localizer;
@@ -65,10 +64,9 @@
* restrictions
* @param ordered true if this collection is ordered
*/
- public AbstractLRSProxyCollection(Class elementType, boolean ordered,
- OpenJPAConfiguration conf) {
+ public AbstractLRSProxyCollection(Class elementType, boolean ordered) {
_elementType = elementType;
- _ct = new CollectionChangeTrackerImpl(this, false, ordered, conf);
+ _ct = new CollectionChangeTrackerImpl(this, false, ordered);
_ct.setAutoOff(false);
}
@@ -109,13 +107,13 @@
public boolean add(Object o) {
Proxies.assertAllowedType(o, _elementType);
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
_ct.added(o);
return true;
}
public boolean addAll(Collection all) {
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
boolean added = false;
Object add;
for (Iterator itr = all.iterator(); itr.hasNext();) {
@@ -130,14 +128,14 @@
public boolean remove(Object o) {
if (!contains(o))
return false;
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
Proxies.removed(this, o, false);
_ct.removed(o);
return true;
}
public boolean removeAll(Collection all) {
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
boolean removed = false;
Object rem;
for (Iterator itr = all.iterator(); itr.hasNext();) {
@@ -157,7 +155,7 @@
return true;
}
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
Itr itr = (Itr) iterator();
try {
boolean removed = false;
@@ -177,7 +175,7 @@
}
public void clear() {
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
Itr itr = (Itr) iterator();
try {
Object rem;
@@ -394,7 +392,7 @@
public void remove() {
if (_state == CLOSED || _last == null)
throw new NoSuchElementException();
- Proxies.dirty(AbstractLRSProxyCollection.this);
+ Proxies.dirty(AbstractLRSProxyCollection.this, false);
_ct.removed(_last);
Proxies.removed(AbstractLRSProxyCollection.this, _last, false);
_last = null;
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyMap.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyMap.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyMap.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/AbstractLRSProxyMap.java Fri Dec 8 10:32:07 2006
@@ -68,11 +68,10 @@
private int _count = -1;
private boolean _iterated = false;
- public AbstractLRSProxyMap(Class keyType, Class valueType,
- OpenJPAConfiguration conf) {
+ public AbstractLRSProxyMap(Class keyType, Class valueType) {
_keyType = keyType;
_valueType = valueType;
- _ct = new MapChangeTrackerImpl(this, conf);
+ _ct = new MapChangeTrackerImpl(this);
_ct.setAutoOff(false);
}
@@ -196,7 +195,7 @@
public Object put(Object key, Object value) {
Proxies.assertAllowedType(key, _keyType);
Proxies.assertAllowedType(value, _valueType);
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
if (_map == null)
_map = new HashMap();
Object old = _map.put(key, value);
@@ -220,7 +219,7 @@
}
public Object remove(Object key) {
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
Object old = (_map == null) ? null : _map.remove(key);
if (old == null && (!_ct.getTrackKeys()
|| !_ct.getRemoved().contains(key)))
@@ -234,7 +233,7 @@
}
public void clear() {
- Proxies.dirty(this);
+ Proxies.dirty(this, false);
Itr itr = iterator(MODE_ENTRY);
try {
Map.Entry entry;
@@ -482,7 +481,7 @@
if (_state == CLOSED || _last == null)
throw new NoSuchElementException();
- Proxies.dirty(AbstractLRSProxyMap.this);
+ Proxies.dirty(AbstractLRSProxyMap.this, false);
Proxies.removed(AbstractLRSProxyMap.this, _last.getKey(), true);
Proxies.removed(AbstractLRSProxyMap.this, _last.getValue(), false);
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/CollectionChangeTrackerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/CollectionChangeTrackerImpl.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/CollectionChangeTrackerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/CollectionChangeTrackerImpl.java Fri Dec 8 10:32:07 2006
@@ -18,8 +18,6 @@
import java.util.ArrayList;
import java.util.Collection;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
-
/**
* Default {@link CollectionChangeTracker}.
*
@@ -42,11 +40,25 @@
* @param order true if the collection is ordered, false otherwise
*/
public CollectionChangeTrackerImpl(Collection coll, boolean dups,
- boolean order, OpenJPAConfiguration conf) {
+ boolean order) {
_coll = coll;
_dups = dups;
_order = order;
}
+
+ /**
+ * Whether the underlying collection allows duplicates.
+ */
+ public boolean allowsDuplicates() {
+ return _dups;
+ }
+
+ /**
+ * Whether the underlying collection is ordered.
+ */
+ public boolean isOrdered() {
+ return _order;
+ }
public void added(Object elem) {
super.added(elem);
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/MapChangeTrackerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/MapChangeTrackerImpl.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/MapChangeTrackerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/MapChangeTrackerImpl.java Fri Dec 8 10:32:07 2006
@@ -17,8 +17,6 @@
import java.util.Map;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
-
/**
* Default {@link MapChangeTracker}.
*
@@ -35,7 +33,7 @@
/**
* Constructor; supply delegate map.
*/
- public MapChangeTrackerImpl(Map map, OpenJPAConfiguration conf) {
+ public MapChangeTrackerImpl(Map map) {
_map = map;
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java Fri Dec 8 10:32:07 2006
@@ -32,10 +32,6 @@
*/
public class Proxies {
- public static final int MODE_ENTRY = 0;
- public static final int MODE_KEY = 1;
- public static final int MODE_VALUE = 2;
-
private static final Localizer _loc = Localizer.forPackage(Proxies.class);
/**
@@ -64,14 +60,15 @@
/**
* Used by proxy types to dirty their owner.
*/
- public static void dirty(Proxy proxy) {
+ public static void dirty(Proxy proxy, boolean stopTracking) {
if (proxy.getOwner() != null)
proxy.getOwner().dirty(proxy.getOwnerField());
+ if (stopTracking && proxy.getChangeTracker() != null)
+ proxy.getChangeTracker().stopTracking();
}
/**
- * Used by proxy types to notify their owner that an element has been
- * removed.
+ * Used by proxy types to notify collection owner on element removal.
*/
public static void removed(Proxy proxy, Object removed, boolean key) {
if (proxy.getOwner() != null && removed != null)
@@ -79,172 +76,13 @@
}
/**
- * Return an iterator that dirties its owner on calls to remove. This
- * iterator assumes that the given proxy collection uses a
- * {@link CollectionChangeTracker}.
+ * Used by proxy types to serialize non-proxy versions.
*/
- public static Iterator iterator(final ProxyCollection proxy,
- final Iterator itr) {
- return new Iterator() {
- private Object _last = null;
-
- public boolean hasNext() {
- return itr.hasNext();
- }
-
- public Object next() {
- _last = itr.next();
- return _last;
- }
-
- public void remove() {
- dirty(proxy);
- itr.remove();
- if (proxy.getChangeTracker() != null)
- ((CollectionChangeTracker) proxy.getChangeTracker()).
- removed(_last);
- removed(proxy, _last, false);
- }
- };
+ public static Object writeReplace(Proxy proxy) {
+ if (proxy == null || proxy.getOwner() == null
+ || proxy.getOwner().isDetached())
+ return proxy;
+ return proxy.copy(proxy);
}
-
- /**
- * Return a proxy iterator that dirties its owner on remove, set, and
- * add. This iterator assumes that the given proxy collection uses a
- * {@link CollectionChangeTracker}.
- */
- public static ListIterator listIterator(final ProxyCollection proxy,
- final ListIterator itr, final Class allowed) {
- return new ListIterator() {
- private Object _last = null;
-
- public boolean hasNext() {
- return itr.hasNext();
- }
-
- public int nextIndex() {
- return itr.nextIndex();
- }
-
- public Object next() {
- _last = itr.next();
- return _last;
- }
-
- public boolean hasPrevious() {
- return itr.hasPrevious();
- }
-
- public int previousIndex() {
- return itr.previousIndex();
- }
-
- public Object previous() {
- _last = itr.previous();
- return _last;
- }
-
- public void set(Object o) {
- assertAllowedType(o, allowed);
- dirty(proxy);
- itr.set(o);
- if (proxy.getChangeTracker() != null)
- proxy.getChangeTracker().stopTracking();
- removed(proxy, _last, false);
- _last = o;
- }
-
- public void add(Object o) {
- assertAllowedType(o, allowed);
- dirty(proxy);
- itr.add(o);
- if (proxy.getChangeTracker() != null) {
- if (hasNext())
- proxy.getChangeTracker().stopTracking();
- else
- ((CollectionChangeTracker) proxy.getChangeTracker()).
- added(o);
- }
- _last = o;
- }
-
- public void remove() {
- dirty(proxy);
- itr.remove();
- if (proxy.getChangeTracker() != null)
- ((CollectionChangeTracker) proxy.getChangeTracker()).
- removed(_last);
- removed(proxy, _last, false);
- }
- };
- }
-
- /**
- * Return a proxy for the given map key or entry set.
- */
- public static Set entrySet(final ProxyMap proxy, final Set set,
- final int mode) {
- return new AbstractSet() {
- public int size() {
- return set.size();
- }
-
- public boolean remove(Object o) {
- if (mode != MODE_KEY)
- throw new UnsupportedOperationException();
-
- Map map = (Map) proxy;
- if (!map.containsKey(o))
- return false;
- map.remove(o);
- return true;
- }
-
- public Iterator iterator() {
- final Iterator itr = set.iterator();
- return new Iterator() {
- private Map.Entry _last = null;
-
- public boolean hasNext() {
- return itr.hasNext();
- }
-
- public Object next() {
- _last = (Map.Entry) itr.next();
- switch (mode) {
- case MODE_KEY:
- return _last.getKey();
- case MODE_VALUE:
- return _last.getValue();
- default:
- return _last;
- }
- }
-
- public void remove() {
- dirty(proxy);
- itr.remove();
- if (proxy.getChangeTracker() != null)
- ((MapChangeTracker) proxy.getChangeTracker()).
- removed(_last.getKey(), _last.getValue());
- removed(proxy, _last.getKey(), true);
- removed(proxy, _last.getValue(), false);
- }
- };
- }
-
- protected Object writeReplace()
- throws ObjectStreamException {
- switch (mode) {
- case MODE_KEY:
- return ((Map) proxy).keySet();
- case MODE_VALUE:
- return ((Map) proxy).values();
- default:
- return ((Map) proxy).entrySet();
- }
- }
- };
- }
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxy.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxy.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxy.java Fri Dec 8 10:32:07 2006
@@ -20,7 +20,7 @@
/**
* Interface implemented by all proxy types to allow setting and nulling
* of their owning instance.
- * All concrete proxy classes should be public and have publc no-args
+ * All concrete proxy classes should be public and have publc no-args
* constructors so that tools that work via reflection on persistent instances
* can manipulate them.
*
Added: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyBean.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyBean.java?view=auto&rev=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyBean.java (added)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyBean.java Fri Dec 8 10:32:07 2006
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.util;
+
+/**
+ * Interface implemented by all generated custom types, which use JavaBean
+ * conventions for copying state.
+ *
+ * @author Abe White
+ */
+public interface ProxyBean
+ extends Proxy {
+
+ /**
+ * Create a new instance of this proxy type with the same state as the
+ * given instance.
+ */
+ public ProxyBean newInstance(Object orig);
+}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCalendar.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCalendar.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCalendar.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCalendar.java Fri Dec 8 10:32:07 2006
@@ -18,8 +18,8 @@
import java.util.TimeZone;
/**
- * Interface implemented by all built-in proxies on
- * {@link java.util.Calendar} types.
+ * Interface implemented by all generated proxies on {@link java.util.Calendar}
+ * types.
*
* @author Marc Prud'hommeaux
*/
@@ -29,6 +29,5 @@
/**
* Return a new instance of this calendar type.
*/
- public ProxyCalendar newInstance(TimeZone timeZone);
+ public ProxyCalendar newInstance();
}
-
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollection.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollection.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollection.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollection.java Fri Dec 8 10:32:07 2006
@@ -18,23 +18,22 @@
import java.util.Collection;
import java.util.Comparator;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
-
/**
- * Interface implemented by all built-in proxies on {@link Collection} types.
+ * Interface implemented by all proxy collection types.
*
* @author Abe White
*/
-public interface ProxyCollection
- extends Proxy {
+public interface ProxyCollection
+ extends Proxy, Collection {
+
+ /**
+ * The collection element type.
+ */
+ public Class getElementType();
/**
- * This method should return a new proxy of the same concrete type as the
- * implementing class. Used by the {@link ProxyManager} factories: one
- * template instance of each type is created for the purpose of producing
- * new instances via this method. Overcomes the performance penalties of
- * reflection.
+ * Create a new instance of this proxy type.
*/
- public ProxyCollection newInstance(Class elementType, Comparator compare,
- boolean trackChanges, OpenJPAConfiguration conf);
+ public ProxyCollection newInstance(Class elementType, Comparator comp,
+ boolean trackChanges);
}
Added: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollections.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollections.java?view=auto&rev=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollections.java (added)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyCollections.java Fri Dec 8 10:32:07 2006
@@ -0,0 +1,468 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.util;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * Utility methods used by collection proxies.
+ *
+ * @author Abe White
+ * @nojavadoc
+ */
+public class ProxyCollections
+ extends Proxies {
+
+ /**
+ * Call before invoking {@link List#add(int,Object)} on super.
+ */
+ public static void beforeAdd(ProxyCollection coll, int index, Object value){
+ assertAllowedType(value, coll.getElementType());
+ dirty(coll, true);
+ }
+
+ /**
+ * Call before invoking {@link Vector#insertElementAt(Object,int)} on super.
+ */
+ public static void beforeInsertElementAt(ProxyCollection coll, Object value,
+ int index) {
+ beforeAdd(coll, index, value);
+ }
+
+ /**
+ * Call before invoking {@link Collection#add(Object)} on super.
+ */
+ public static void beforeAdd(ProxyCollection coll, Object value) {
+ assertAllowedType(value, coll.getElementType());
+ dirty(coll, false);
+ }
+
+ /**
+ * Call after invoking {@link Collection#add(Object)} on super.
+ *
+ * @param added whether the object was added
+ * @return <code>added</code>, for convenience
+ */
+ public static boolean afterAdd(ProxyCollection coll, Object value,
+ boolean added) {
+ if (added && coll.getChangeTracker() != null)
+ ((CollectionChangeTracker) coll.getChangeTracker()).added(value);
+ return added;
+ }
+
+ /**
+ * Call before invoking {@link Vector#addElement(Object)} on super.
+ */
+ public static void beforeAddElement(ProxyCollection coll, Object value) {
+ beforeAdd(coll, value);
+ }
+
+ /**
+ * Call after invoking {@link Vector#addElement(Object)} on super.
+ */
+ public static void afterAddElement(ProxyCollection coll, Object value) {
+ afterAdd(coll, value, true);
+ }
+
+ /**
+ * Call before invoking {@link LinkedList#addFirst(Object)} on super.
+ */
+ public static void beforeAddFirst(ProxyCollection coll, Object value) {
+ beforeAdd(coll, 0, value);
+ }
+
+ /**
+ * Call before invoking {@link LinkedList#addLast(Object)} on super.
+ */
+ public static void beforeAddLast(ProxyCollection coll, Object value) {
+ beforeAdd(coll, value);
+ }
+
+ /**
+ * Call after invoking {@link LinkedList#addLast(Object)} on super.
+ */
+ public static void afterAddLast(ProxyCollection coll, Object value) {
+ afterAdd(coll, value, true);
+ }
+
+ /**
+ * Call before invoking {@link Queue#offer(Object)} on super.
+ */
+ public static void beforeOffer(ProxyCollection coll, Object value) {
+ beforeAdd(coll, value);
+ }
+
+ /**
+ * Call after invoking {@link Queue#offer(Object)} on super.
+ *
+ * @param added whether the object was added
+ * @return <code>added</code>, for convenience
+ */
+ public static boolean afterOffer(ProxyCollection coll, Object value,
+ boolean added) {
+ return afterAdd(coll, value, added);
+ }
+
+ /**
+ * Override for {@link List#addAll(int, Collection)}.
+ */
+ public static boolean addAll(ProxyCollection coll, int index,
+ Collection values) {
+ List list = (List) coll;
+ for (Iterator itr = values.iterator(); itr.hasNext(); index++)
+ list.add(index, itr.next());
+ return values.size() > 0;
+ }
+
+ /**
+ * Override for {@link Collection#addAll}.
+ */
+ public static boolean addAll(ProxyCollection coll, Collection values) {
+ boolean added = false;
+ for (Iterator itr = values.iterator(); itr.hasNext();)
+ added |= coll.add(itr.next());
+ return added;
+ }
+
+ /**
+ * Call before clearing collection.
+ */
+ public static void beforeClear(ProxyCollection coll) {
+ dirty(coll, true);
+ for (Iterator itr = coll.iterator(); itr.hasNext();)
+ removed(coll, itr.next(), false);
+ }
+
+ /**
+ * Call before clearing vector.
+ */
+ public static void beforeRemoveAllElements(ProxyCollection coll) {
+ beforeClear(coll);
+ }
+
+ /**
+ * Wrap given iterator in a proxy.
+ */
+ public static Iterator afterIterator(final ProxyCollection coll,
+ final Iterator itr) {
+ // check for proxied; some coll impls delegate iterator methods
+ if (itr instanceof ProxyIterator)
+ return itr;
+ return new ProxyIterator() {
+ private Object _last = null;
+
+ public boolean hasNext() {
+ return itr.hasNext();
+ }
+
+ public Object next() {
+ _last = itr.next();
+ return _last;
+ }
+
+ public void remove() {
+ dirty(coll, false);
+ itr.remove();
+ if (coll.getChangeTracker() != null)
+ ((CollectionChangeTracker) coll.getChangeTracker()).
+ removed(_last);
+ Proxies.removed(coll, _last, false);
+ }
+ };
+ }
+
+ /**
+ * Wrap given iterator in a proxy.
+ */
+ public static ListIterator afterListIterator(final ProxyCollection coll,
+ int idx, final ListIterator itr) {
+ return afterListIterator(coll, itr);
+ }
+
+ /**
+ * Wrap given iterator in a proxy.
+ */
+ public static ListIterator afterListIterator(final ProxyCollection coll,
+ final ListIterator itr) {
+ // check for proxied; some coll impls delegate iterator methods
+ if (itr instanceof ProxyListIterator)
+ return itr;
+ return new ProxyListIterator() {
+ private Object _last = null;
+
+ public boolean hasNext() {
+ return itr.hasNext();
+ }
+
+ public int nextIndex() {
+ return itr.nextIndex();
+ }
+
+ public Object next() {
+ _last = itr.next();
+ return _last;
+ }
+
+ public boolean hasPrevious() {
+ return itr.hasPrevious();
+ }
+
+ public int previousIndex() {
+ return itr.previousIndex();
+ }
+
+ public Object previous() {
+ _last = itr.previous();
+ return _last;
+ }
+
+ public void set(Object o) {
+ assertAllowedType(o, coll.getElementType());
+ dirty(coll, false);
+ itr.set(o);
+ if (coll.getChangeTracker() != null)
+ coll.getChangeTracker().stopTracking();
+ Proxies.removed(coll, _last, false);
+ _last = o;
+ }
+
+ public void add(Object o) {
+ assertAllowedType(o, coll.getElementType());
+ dirty(coll, false);
+ itr.add(o);
+ if (coll.getChangeTracker() != null) {
+ if (hasNext())
+ coll.getChangeTracker().stopTracking();
+ else
+ ((CollectionChangeTracker) coll.getChangeTracker()).
+ added(o);
+ }
+ _last = o;
+ }
+
+ public void remove() {
+ dirty(coll, false);
+ itr.remove();
+ if (coll.getChangeTracker() != null)
+ ((CollectionChangeTracker) coll.getChangeTracker()).
+ removed(_last);
+ Proxies.removed(coll, _last, false);
+ }
+ };
+ }
+
+ /**
+ * Call before invoking {@link List#remove(int)} on super.
+ */
+ public static void beforeRemove(ProxyCollection coll, int index) {
+ dirty(coll, false);
+ }
+
+ /**
+ * Call after invoking {@link List#remove(int)} on super.
+ *
+ * @param removed the removed object
+ * @return the removed object, for convenience
+ */
+ public static Object afterRemove(ProxyCollection coll, int index,
+ Object removed) {
+ if (coll.getChangeTracker() != null)
+ ((CollectionChangeTracker)coll.getChangeTracker()).removed(removed);
+ removed(coll, removed, false);
+ return removed;
+ }
+
+ /**
+ * Call before invoking {@link Vector#removeElementAt(int)} on super.
+ */
+ public static void beforeRemoveElementAt(ProxyCollection coll, int index) {
+ beforeRemove(coll, index);
+ }
+
+ /**
+ * Call before invoking {@link Collection#remove} on super.
+ */
+ public static void beforeRemove(ProxyCollection coll, Object o) {
+ dirty(coll, false);
+ }
+
+ /**
+ * Call after invoking {@link Collection#remove} on super.
+ *
+ * @param removed whether the object was removed
+ * @return whether the object was removed, for convenience
+ */
+ public static boolean afterRemove(ProxyCollection coll, Object o,
+ boolean removed){
+ if (!removed)
+ return false;
+ if (coll.getChangeTracker() != null)
+ ((CollectionChangeTracker) coll.getChangeTracker()).removed(o);
+ removed(coll, o, false);
+ return true;
+ }
+
+ /**
+ * Call before invoking {@link Vector#removeElement} on super.
+ */
+ public static void beforeRemoveElement(ProxyCollection coll, Object o) {
+ beforeRemove(coll, o);
+ }
+
+ /**
+ * Call after invoking {@link Vector#removeElement} on super.
+ */
+ public static boolean afterRemoveElement(ProxyCollection coll, Object o,
+ boolean removed) {
+ return afterRemove(coll, o, removed);
+ }
+
+ /**
+ * Call before invoking {@link LinkedList#removeFirst} on super.
+ */
+ public static void beforeRemoveFirst(ProxyCollection coll) {
+ beforeRemove(coll, 0);
+ }
+
+ /**
+ * Call after invoking {@link LinkedList#removeFirst} on super.
+ */
+ public static Object afterRemoveFirst(ProxyCollection coll, Object removed){
+ return afterRemove(coll, 0, removed);
+ }
+
+ /**
+ * Call after invoking {@link LinkedList#removeLast} on super.
+ */
+ public static void beforeRemoveLast(ProxyCollection coll) {
+ beforeRemove(coll, coll.size() - 1);
+ }
+
+ /**
+ * Call after invoking {@link LinkedList#removeLast} on super.
+ */
+ public static Object afterRemoveLast(ProxyCollection coll, Object removed) {
+ return afterRemove(coll, coll.size(), removed);
+ }
+
+ /**
+ * Call before invoking {@link Queue#remove} on super.
+ */
+ public static void beforeRemove(ProxyCollection coll) {
+ beforeRemove(coll, 0);
+ }
+
+ /**
+ * Call after invoking {@link Queue#remove} on super.
+ */
+ public static Object afterRemove(ProxyCollection coll, Object removed){
+ return afterRemove(coll, 0, removed);
+ }
+
+ /**
+ * Call before invoking {@link Queue#poll} on super.
+ */
+ public static void beforePoll(ProxyCollection coll) {
+ if (!coll.isEmpty())
+ beforeRemove(coll, 0);
+ }
+
+ /**
+ * Call after invoking {@link Queue#poll} on super.
+ */
+ public static Object afterPoll(ProxyCollection coll, Object removed) {
+ if (removed != null)
+ afterRemove(coll, 0, removed);
+ return removed;
+ }
+
+ /**
+ * Override for {@link Collection#removeAll}.
+ */
+ public static boolean removeAll(ProxyCollection coll, Collection vals) {
+ boolean removed = false;
+ for (Iterator itr = vals.iterator(); itr.hasNext();)
+ removed |= coll.remove(itr.next());
+ return removed;
+ }
+
+ /**
+ * Override for {@link Collection#retainAll}.
+ */
+ public static boolean retainAll(ProxyCollection coll, Collection vals) {
+ int size = coll.size();
+ for (Iterator itr = coll.iterator(); itr.hasNext();)
+ if (!vals.contains(itr.next()))
+ itr.remove();
+ return coll.size() < size;
+ }
+
+ /**
+ * Call before invoking {@link List#set} on super.
+ */
+ public static void beforeSet(ProxyCollection coll, int index,
+ Object element) {
+ assertAllowedType(element, coll.getElementType());
+ dirty(coll, true);
+ }
+
+ /**
+ * Call after invoking {@link List#set} on super.
+ *
+ * @param replaced the replaced object
+ * @return the replaced object, for convenience
+ */
+ public static Object afterSet(ProxyCollection coll, int index,
+ Object element, Object replaced) {
+ if (replaced != element)
+ removed(coll, replaced, false);
+ return replaced;
+ }
+
+ /**
+ * Call before invoking {@link Vector#setElementAt} on super.
+ */
+ public static void beforeSetElementAt(ProxyCollection coll, Object element,
+ int index) {
+ beforeSet(coll, index, element);
+ }
+
+ /**
+ * Call after invoking {@link Vector#setElementAt} on super.
+ */
+ public static Object afterSetElementAt(ProxyCollection coll, Object element,
+ int index, Object replaced) {
+ return afterSet(coll, index, element, replaced);
+ }
+
+ /**
+ * Marker interface for a proxied iterator.
+ */
+ public static interface ProxyIterator
+ extends Iterator {
+ }
+
+ /**
+ * Marker interface for a proxied list iterator.
+ */
+ public static interface ProxyListIterator
+ extends ProxyIterator, ListIterator {
+ }
+}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyDate.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyDate.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyDate.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyDate.java Fri Dec 8 10:32:07 2006
@@ -16,7 +16,7 @@
package org.apache.openjpa.util;
/**
- * Interface implemented by all built-in proxies on {@link java.util.Date}
+ * Interface implemented by all generated proxies on {@link java.util.Date}
* types.
*
* @author Abe White
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManager.java?view=diff&rev=484693&r1=484692&r2=484693
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManager.java Fri Dec 8 10:32:07 2006
@@ -41,32 +41,6 @@
public interface ProxyManager {
/**
- * Return a copy of the given date with the same information.
- */
- public Date copyDate(Date orig);
-
- /**
- * Return a copy of the given Calendar with the same information.
- */
- public Calendar copyCalendar(Calendar orig);
-
- /**
- * Return a new collection of the same type as the given one
- * with a copy of all contained elements.
- * If the given owner is non-null, the returned value should be a proxy
- * for the given owner, otherwise it should not be a proxy.
- */
- public Collection copyCollection(Collection orig);
-
- /**
- * Return a new map of the same type as the given one
- * with a copy of all contained key/value pairs.
- * If the given owner is non-null, the returned value should be a proxy
- * for the given owner, otherwise it should not be a proxy.
- */
- public Map copyMap(Map orig);
-
- /**
* Return a new array of the same component type as the given array
* and containing the same elements. Works for both primitive and
* object array types.
@@ -74,14 +48,9 @@
public Object copyArray(Object orig);
/**
- * Return a copy of the given object with the same
- * information. If this manager cannot proxy the given type, return null.
- * If the given owner is non-null, the returned value should be a proxy
- * for the given owner, otherwise it should not be a proxy.
- *
- * @since 0.2.5
+ * Return a copy of the given date with the same information.
*/
- public Object copyCustom(Object orig);
+ public Date copyDate(Date orig);
/**
* Return a new date proxy.
@@ -89,11 +58,22 @@
public Proxy newDateProxy(Class type);
/**
+ * Return a copy of the given calendar with the same information.
+ */
+ public Calendar copyCalendar(Calendar orig);
+
+ /**
* Return a new calendar proxy.
*/
public Proxy newCalendarProxy(Class type, TimeZone timeZone);
/**
+ * Return a new collection of the same type as the given one
+ * with a copy of all contained elements.
+ */
+ public Collection copyCollection(Collection orig);
+
+ /**
* Return a proxy for the given collection type. The returned collection
* will allow only addition of elements assignable from the given
* element type and will use the given comparator, if it is not null.
@@ -102,12 +82,26 @@
Comparator compare);
/**
+ * Return a new map of the same type as the given one
+ * with a copy of all contained key/value pairs.
+ */
+ public Map copyMap(Map orig);
+
+ /**
* Return a proxy for the given map type. The returned map will
* allow only addition of keys/values assignable from the given
* keyType/valueType, and will use the given comparator, if it is not null.
*/
public Proxy newMapProxy(Class type, Class keyType, Class valueType,
Comparator compare);
+
+ /**
+ * Return a copy of the given object with the same information, or null if
+ * this manager cannot copy the object.
+ *
+ * @since 0.2.5
+ */
+ public Object copyCustom(Object orig);
/**
* Return a proxy for the given object, or null if this manager cannot