diff --git a/ebean-api/src/main/java/io/ebean/common/AbstractBeanCollection.java b/ebean-api/src/main/java/io/ebean/common/AbstractBeanCollection.java
index 912d9582f..c453d99cd 100644
--- a/ebean-api/src/main/java/io/ebean/common/AbstractBeanCollection.java
+++ b/ebean-api/src/main/java/io/ebean/common/AbstractBeanCollection.java
@@ -17,39 +17,28 @@ abstract class AbstractBeanCollection implements BeanCollection {
private static final long serialVersionUID = 3365725236140187588L;
protected final ReentrantLock lock = new ReentrantLock();
-
protected boolean readOnly;
-
protected boolean disableLazyLoad;
-
/**
* The Database this is associated with. (used for lazy fetch).
*/
protected transient BeanCollectionLoader loader;
-
protected transient ExpressionList> filterMany;
-
/**
* Flag set when registered with the batch loading context.
*/
protected boolean registeredWithLoadContext;
-
protected String ebeanServerName;
-
/**
* The owning bean (used for lazy fetch).
*/
protected EntityBean ownerBean;
-
/**
* The name of this property in the owning bean (used for lazy fetch).
*/
protected String propertyName;
-
protected ModifyHolder modifyHolder;
-
protected ModifyListenMode modifyListenMode;
-
protected boolean modifyListening;
/**
@@ -126,8 +115,7 @@ abstract class AbstractBeanCollection implements BeanCollection {
void checkReadOnly() {
if (readOnly) {
- String msg = "This collection is in ReadOnly mode";
- throw new IllegalStateException(msg);
+ throw new IllegalStateException("This collection is in ReadOnly mode");
}
}
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanList.java b/ebean-api/src/main/java/io/ebean/common/BeanList.java
index 0a04eb472..22842fa14 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanList.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanList.java
@@ -11,7 +11,7 @@ import java.util.List;
import java.util.ListIterator;
/**
- * List capable of lazy loading.
+ * List capable of lazy loading and modification awareness.
*/
public final class BeanList extends AbstractBeanCollection implements List, BeanCollectionAdd {
@@ -150,7 +150,6 @@ public final class BeanList extends AbstractBeanCollection implements List
* Set the actual underlying list.
*
* This is primarily for the deferred fetching function.
- *
*/
@SuppressWarnings("unchecked")
public void setActualList(List> list) {
@@ -206,12 +205,11 @@ public final class BeanList extends AbstractBeanCollection implements List
* Specifically obj does not need to be a BeanList but any list. This does not
* use the FindMany, fetchedMaxRows or finishedFetch properties in the equals
* test.
- *
*/
@Override
- public boolean equals(Object obj) {
+ public boolean equals(Object other) {
init();
- return list.equals(obj);
+ return list.equals(other);
}
@Override
@@ -244,40 +242,40 @@ public final class BeanList extends AbstractBeanCollection implements List
}
@Override
- public boolean add(E o) {
+ public boolean add(E bean) {
checkReadOnly();
init();
if (modifyListening) {
- if (list.add(o)) {
- modifyAddition(o);
+ if (list.add(bean)) {
+ modifyAddition(bean);
return true;
} else {
return false;
}
}
- return list.add(o);
+ return list.add(bean);
}
@Override
- public boolean addAll(Collection extends E> c) {
+ public boolean addAll(Collection extends E> beans) {
checkReadOnly();
init();
if (modifyListening) {
// all elements in c are added (no contains checking)
- getModifyHolder().modifyAdditionAll(c);
+ getModifyHolder().modifyAdditionAll(beans);
}
- return list.addAll(c);
+ return list.addAll(beans);
}
@Override
- public boolean addAll(int index, Collection extends E> c) {
+ public boolean addAll(int index, Collection extends E> beans) {
checkReadOnly();
init();
if (modifyListening) {
// all elements in c are added (no contains checking)
- getModifyHolder().modifyAdditionAll(c);
+ getModifyHolder().modifyAdditionAll(beans);
}
- return list.addAll(index, c);
+ return list.addAll(index, beans);
}
@Override
@@ -287,23 +285,23 @@ public final class BeanList extends AbstractBeanCollection implements List
// and fetch just the Id's
initClear();
if (modifyListening) {
- for (E aList : list) {
- getModifyHolder().modifyRemoval(aList);
+ for (E element : list) {
+ getModifyHolder().modifyRemoval(element);
}
}
list.clear();
}
@Override
- public boolean contains(Object o) {
+ public boolean contains(Object bean) {
init();
- return list.contains(o);
+ return list.contains(bean);
}
@Override
- public boolean containsAll(Collection> c) {
+ public boolean containsAll(Collection> beans) {
init();
- return list.containsAll(c);
+ return list.containsAll(beans);
}
@Override
@@ -313,9 +311,9 @@ public final class BeanList extends AbstractBeanCollection implements List
}
@Override
- public int indexOf(Object o) {
+ public int indexOf(Object bean) {
init();
- return list.indexOf(o);
+ return list.indexOf(bean);
}
@Override
@@ -327,31 +325,29 @@ public final class BeanList extends AbstractBeanCollection implements List
@Override
public Iterator iterator() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return new ReadOnlyListIterator<>(list.listIterator());
}
if (modifyListening) {
- Iterator it = list.iterator();
- return new ModifyIterator<>(this, it);
+ return new ModifyIterator<>(this, list.iterator());
}
return list.iterator();
}
@Override
- public int lastIndexOf(Object o) {
+ public int lastIndexOf(Object bean) {
init();
- return list.lastIndexOf(o);
+ return list.lastIndexOf(bean);
}
@Override
public ListIterator listIterator() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return new ReadOnlyListIterator<>(list.listIterator());
}
if (modifyListening) {
- ListIterator it = list.listIterator();
- return new ModifyListIterator<>(this, it);
+ return new ModifyListIterator<>(this, list.listIterator());
}
return list.listIterator();
}
@@ -359,12 +355,11 @@ public final class BeanList extends AbstractBeanCollection implements List
@Override
public ListIterator listIterator(int index) {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return new ReadOnlyListIterator<>(list.listIterator(index));
}
if (modifyListening) {
- ListIterator it = list.listIterator(index);
- return new ModifyListIterator<>(this, it);
+ return new ModifyListIterator<>(this, list.listIterator(index));
}
return list.listIterator(index);
}
@@ -389,17 +384,17 @@ public final class BeanList extends AbstractBeanCollection implements List
}
@Override
- public boolean remove(Object o) {
+ public boolean remove(Object bean) {
checkReadOnly();
init();
if (modifyListening) {
- boolean isRemove = list.remove(o);
+ boolean isRemove = list.remove(bean);
if (isRemove) {
- modifyRemoval(o);
+ modifyRemoval(bean);
}
return isRemove;
}
- return list.remove(o);
+ return list.remove(bean);
}
@Override
@@ -463,7 +458,7 @@ public final class BeanList extends AbstractBeanCollection implements List
@Override
public List subList(int fromIndex, int toIndex) {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return Collections.unmodifiableList(list.subList(fromIndex, toIndex));
}
if (modifyListening) {
@@ -479,13 +474,13 @@ public final class BeanList extends AbstractBeanCollection implements List
}
@Override
- public T[] toArray(T[] a) {
+ public T[] toArray(T[] array) {
init();
//noinspection SuspiciousToArrayCall
- return list.toArray(a);
+ return list.toArray(array);
}
- private static class ReadOnlyListIterator implements ListIterator, Serializable {
+ private static final class ReadOnlyListIterator implements ListIterator, Serializable {
private static final long serialVersionUID = 3097271091406323699L;
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanMap.java b/ebean-api/src/main/java/io/ebean/common/BeanMap.java
index 454642d55..3809a9d25 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanMap.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanMap.java
@@ -12,7 +12,7 @@ import java.util.Map;
import java.util.Set;
/**
- * Map capable of lazy loading.
+ * Map capable of lazy loading and modification aware.
*/
public final class BeanMap extends AbstractBeanCollection implements Map {
@@ -247,7 +247,7 @@ public final class BeanMap extends AbstractBeanCollection implements Ma
@Override
public Set> entrySet() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return Collections.unmodifiableSet(map.entrySet());
}
return modifyListening ? new ModifyEntrySet<>(this, map.entrySet()) : map.entrySet();
@@ -268,7 +268,7 @@ public final class BeanMap extends AbstractBeanCollection implements Ma
@Override
public Set keySet() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return Collections.unmodifiableSet(map.keySet());
}
return modifyListening ? new ModifyKeySet<>(this, map.keySet()) : map.keySet();
@@ -339,7 +339,7 @@ public final class BeanMap extends AbstractBeanCollection implements Ma
@Override
public Collection values() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return Collections.unmodifiableCollection(map.values());
}
return modifyListening ? new ModifyCollection<>(this, map.values()) : map.values();
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanSet.java b/ebean-api/src/main/java/io/ebean/common/BeanSet.java
index 683b2c1f9..6440362e4 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanSet.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanSet.java
@@ -9,7 +9,7 @@ import java.util.LinkedHashSet;
import java.util.Set;
/**
- * Set capable of lazy loading.
+ * Set capable of lazy loading and modification aware.
*/
public final class BeanSet extends AbstractBeanCollection implements Set, BeanCollectionAdd {
@@ -210,27 +210,27 @@ public final class BeanSet extends AbstractBeanCollection implements Set addCollection) {
+ public boolean addAll(Collection extends E> beans) {
checkReadOnly();
init();
if (modifyListening) {
boolean changed = false;
- for (E bean : addCollection) {
+ for (E bean : beans) {
if (set.add(bean)) {
// register the addition of the bean
modifyAddition(bean);
@@ -239,7 +239,7 @@ public final class BeanSet extends AbstractBeanCollection implements Set extends AbstractBeanCollection implements Set c) {
+ public boolean containsAll(Collection> beans) {
init();
- return set.containsAll(c);
+ return set.containsAll(beans);
}
@Override
@@ -275,7 +275,7 @@ public final class BeanSet extends AbstractBeanCollection implements Set iterator() {
init();
- if (isReadOnly()) {
+ if (readOnly) {
return new ReadOnlyIterator<>(set.iterator());
}
if (modifyListening) {
@@ -285,17 +285,17 @@ public final class BeanSet extends AbstractBeanCollection implements Set extends AbstractBeanCollection implements Set T[] toArray(T[] a) {
+ public T[] toArray(T[] array) {
init();
//noinspection SuspiciousToArrayCall
- return set.toArray(a);
+ return set.toArray(array);
}
- private static class ReadOnlyIterator implements Iterator, Serializable {
+ private static final class ReadOnlyIterator implements Iterator, Serializable {
private static final long serialVersionUID = 2577697326745352605L;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
index c0ce6c264..d1aae9fb2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
@@ -1,5 +1,9 @@
package io.ebeaninternal.server.deploy;
+import io.ebean.bean.BeanCollection;
+import io.ebean.bean.EntityBean;
+import io.ebean.common.BeanList;
+import io.ebean.common.BeanSet;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.el.ElPropertyValue;
@@ -12,18 +16,17 @@ import io.ebeaninternal.server.query.CQueryCollectionAdd;
public final class BeanCollectionHelpFactory {
@SuppressWarnings("rawtypes")
- private static final BeanListHelp LIST_HELP = new BeanListHelp();
+ private static final CQueryCollectionAdd LIST_HELP = new ListAdd();
@SuppressWarnings("rawtypes")
- private static final BeanSetHelp SET_HELP = new BeanSetHelp();
+ private static final CQueryCollectionAdd SET_HELP = new SetAdd();
/**
* Create the helper based on the many property.
*/
public static BeanCollectionHelp create(BeanPropertyAssocMany many) {
boolean elementCollection = many.isElementCollection();
- ManyType manyType = many.manyType();
- switch (manyType) {
+ switch (many.manyType()) {
case LIST:
return elementCollection ? new BeanListHelpElement<>(many) : new BeanListHelp<>(many);
case SET:
@@ -31,7 +34,7 @@ public final class BeanCollectionHelpFactory {
case MAP:
return elementCollection ? new BeanMapHelpElement<>(many) : new BeanMapHelp<>(many);
default:
- throw new RuntimeException("Invalid type " + manyType);
+ throw new RuntimeException("Invalid type " + many.manyType());
}
}
@@ -53,4 +56,30 @@ public final class BeanCollectionHelpFactory {
}
}
+ private static final class ListAdd implements CQueryCollectionAdd {
+
+ @Override
+ public BeanCollection createEmptyNoParent() {
+ return new BeanList<>();
+ }
+
+ @Override
+ public void add(BeanCollection> collection, EntityBean bean, boolean withCheck) {
+ collection.internalAdd(bean);
+ }
+ }
+
+ private static final class SetAdd implements CQueryCollectionAdd {
+
+ @Override
+ public BeanCollection createEmptyNoParent() {
+ return new BeanSet<>();
+ }
+
+ @Override
+ public void add(BeanCollection> collection, EntityBean bean, boolean withCheck) {
+ collection.internalAdd(bean);
+ }
+ }
+
}