#1035 Update for - FIX: deleting and adding same bean in beanCollection leads to deletion in DB

If use Modify mode we need to listen for both adds and removes to support sorting (can't rely on undoDelete() due to ordering)
This commit is contained in:
rob bygrave
2017-06-19 23:34:44 +12:00
parent dbf4e99187
commit 100d314e63
2 changed files with 8 additions and 15 deletions
@@ -47,8 +47,7 @@ abstract class AbstractBeanCollection<E> implements BeanCollection<E> {
protected ModifyHolder<E> modifyHolder;
protected ModifyListenMode modifyListenMode;
protected boolean modifyAddListening;
protected boolean modifyRemoveListening;
protected boolean modifyListening;
/**
@@ -148,9 +147,7 @@ abstract class AbstractBeanCollection<E> implements BeanCollection<E> {
public void setModifyListening(ModifyListenMode mode) {
this.modifyListenMode = mode;
this.modifyAddListening = ModifyListenMode.ALL.equals(mode);
this.modifyRemoveListening = modifyAddListening || ModifyListenMode.REMOVALS.equals(mode);
this.modifyListening = modifyRemoveListening || modifyAddListening;
this.modifyListening = mode != null && ModifyListenMode.NONE != mode;
if (modifyListening) {
// lose any existing modifications
modifyHolder = null;
@@ -173,19 +170,15 @@ abstract class AbstractBeanCollection<E> implements BeanCollection<E> {
@Override
public void modifyAddition(E bean) {
if (modifyAddListening) {
if (modifyListening) {
getModifyHolder().modifyAddition(bean);
} else if (modifyRemoveListening) {
getModifyHolder().undoDeletion(bean);
}
}
@Override
public void modifyRemoval(Object bean) {
if (modifyRemoveListening) {
if (modifyListening) {
getModifyHolder().modifyRemoval(bean);
} else if (modifyAddListening) {
getModifyHolder().undoAddition(bean);
}
}
@@ -44,10 +44,10 @@ class ModifyHolder<E> implements Serializable {
}
}
boolean undoDeletion(E bean) {
private boolean undoDeletion(E bean) {
return (bean != null) && modifyDeletions.remove(bean);
}
void modifyAddition(E bean) {
if (bean != null) {
// If it is to delete then just remove the deletion
@@ -58,10 +58,10 @@ class ModifyHolder<E> implements Serializable {
}
}
boolean undoAddition(Object bean) {
private boolean undoAddition(Object bean) {
return (bean != null) && modifyAdditions.remove(bean);
}
@SuppressWarnings("unchecked")
void modifyRemoval(Object bean) {
if (bean != null) {