mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#846 - Add soft delete related callbacks
This commit is contained in:
@@ -13,8 +13,7 @@ import java.util.Set;
|
||||
public abstract class AbstractBeanPersistListener implements BeanPersistListener {
|
||||
|
||||
/**
|
||||
* Notified that a bean has been inserted locally. Return true if you want the
|
||||
* cluster to be notified of the event.
|
||||
* Notified that a bean has been inserted.
|
||||
*
|
||||
* @param bean The bean that was inserted.
|
||||
*/
|
||||
@@ -23,8 +22,7 @@ public abstract class AbstractBeanPersistListener implements BeanPersistListener
|
||||
}
|
||||
|
||||
/**
|
||||
* Notified that a bean has been updated locally. Return true if you want the
|
||||
* cluster to be notified of the event.
|
||||
* Notified that a bean has been updated.
|
||||
*
|
||||
* @param bean The bean that was updated.
|
||||
* @param updatedProperties The properties that were modified by this update.
|
||||
@@ -34,8 +32,7 @@ public abstract class AbstractBeanPersistListener implements BeanPersistListener
|
||||
}
|
||||
|
||||
/**
|
||||
* Notified that a bean has been deleted locally. Return true if you want the
|
||||
* cluster to be notified of the event.
|
||||
* Notified that a bean has been deleted.
|
||||
*
|
||||
* @param bean The bean that was deleted.
|
||||
*/
|
||||
@@ -43,4 +40,12 @@ public abstract class AbstractBeanPersistListener implements BeanPersistListener
|
||||
public void deleted(Object bean) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Notified that a bean has been soft deleted.
|
||||
*
|
||||
* @param bean The bean that was deleted.
|
||||
*/
|
||||
@Override
|
||||
public void softDeleted(Object bean) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,13 @@ public abstract class BeanPersistAdapter implements BeanPersistController {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true indicating normal processing should continue.
|
||||
*/
|
||||
public boolean preSoftDelete(BeanPersistRequest<?> request) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does nothing by default.
|
||||
*/
|
||||
@@ -64,4 +71,10 @@ public abstract class BeanPersistAdapter implements BeanPersistController {
|
||||
public void postUpdate(BeanPersistRequest<?> request) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Does nothing by default.
|
||||
*/
|
||||
public void postSoftDelete(BeanPersistRequest<?> request) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -89,6 +89,12 @@ public interface BeanPersistController {
|
||||
*/
|
||||
boolean preDelete(BeanPersistRequest<?> request);
|
||||
|
||||
/**
|
||||
* Prior to a soft delete perform some action. Return true if you want the
|
||||
* default functionality to continue.
|
||||
*/
|
||||
boolean preSoftDelete(BeanPersistRequest<?> request);
|
||||
|
||||
/**
|
||||
* Called after the insert was performed.
|
||||
*/
|
||||
@@ -104,4 +110,8 @@ public interface BeanPersistController {
|
||||
*/
|
||||
void postDelete(BeanPersistRequest<?> request);
|
||||
|
||||
/**
|
||||
* Called after the soft delete was performed.
|
||||
*/
|
||||
void postSoftDelete(BeanPersistRequest<?> request);
|
||||
}
|
||||
|
||||
@@ -67,4 +67,12 @@ public interface BeanPersistListener {
|
||||
*/
|
||||
void deleted(Object bean);
|
||||
|
||||
/**
|
||||
* Notified that a bean has been soft deleted.
|
||||
*
|
||||
* @param bean
|
||||
* The bean that was soft deleted.
|
||||
*/
|
||||
void softDeleted(Object bean);
|
||||
|
||||
}
|
||||
|
||||
@@ -373,6 +373,7 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
beanDescriptor.docStoreInsert(idValue, this, txn);
|
||||
break;
|
||||
case UPDATE:
|
||||
case SOFT_DELETE:
|
||||
beanDescriptor.docStoreUpdate(idValue, this, txn);
|
||||
break;
|
||||
case DELETE:
|
||||
@@ -392,6 +393,7 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
docStoreUpdates.queueIndex(beanDescriptor.getDocStoreQueueId(), idValue);
|
||||
break;
|
||||
case UPDATE:
|
||||
case SOFT_DELETE:
|
||||
docStoreUpdates.queueIndex(beanDescriptor.getDocStoreQueueId(), idValue);
|
||||
break;
|
||||
case DELETE:
|
||||
@@ -422,6 +424,10 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
beanPersistListener.deleted(bean);
|
||||
break;
|
||||
|
||||
case SOFT_DELETE:
|
||||
beanPersistListener.softDeleted(bean);
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
@@ -654,7 +660,7 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
|
||||
case SOFT_DELETE:
|
||||
prepareForSoftDelete();
|
||||
persistExecute.executeUpdateBean(this);
|
||||
persistExecute.executeSoftDeleteBean(this);
|
||||
return -1;
|
||||
|
||||
case DELETE:
|
||||
@@ -787,13 +793,11 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
controller.postInsert(this);
|
||||
break;
|
||||
case UPDATE:
|
||||
case SOFT_DELETE:
|
||||
/*
|
||||
* In the previous version, in case SOFT_DELETE the method controller.postDelete was called. However,
|
||||
* this lead to an inconsistent situation, because first controller.preUpdate is called.
|
||||
*/
|
||||
controller.postUpdate(this);
|
||||
break;
|
||||
case SOFT_DELETE:
|
||||
controller.postSoftDelete(this);
|
||||
break;
|
||||
case DELETE:
|
||||
controller.postDelete(this);
|
||||
break;
|
||||
@@ -1047,4 +1051,32 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void executeInsert() {
|
||||
if (controller == null || controller.preInsert(this)) {
|
||||
beanManager.getBeanPersister().insert(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void executeUpdate() {
|
||||
if (controller == null || controller.preUpdate(this)) {
|
||||
postControllerPrepareUpdate();
|
||||
beanManager.getBeanPersister().update(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void executeSoftDelete() {
|
||||
if (controller == null || controller.preSoftDelete(this)) {
|
||||
postControllerPrepareUpdate();
|
||||
beanManager.getBeanPersister().update(this);
|
||||
}
|
||||
}
|
||||
|
||||
public int executeDelete() {
|
||||
if (controller == null || controller.preDelete(this)) {
|
||||
return beanManager.getBeanPersister().delete(this);
|
||||
}
|
||||
// delete handled by the BeanController so return 0
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +122,13 @@ public class ChainedBeanPersistController implements BeanPersistController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postSoftDelete(BeanPersistRequest<?> request) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
chain[i].postSoftDelete(request);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preDelete(BeanPersistRequest<?> request) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
@@ -132,6 +139,16 @@ public class ChainedBeanPersistController implements BeanPersistController {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preSoftDelete(BeanPersistRequest<?> request) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
if (!chain[i].preSoftDelete(request)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preInsert(BeanPersistRequest<?> request) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
|
||||
@@ -18,7 +18,7 @@ public class ChainedBeanPersistListener implements BeanPersistListener {
|
||||
/**
|
||||
* Construct adding 2 BeanPersistListener's.
|
||||
*/
|
||||
public ChainedBeanPersistListener(BeanPersistListener c1, BeanPersistListener c2) {
|
||||
ChainedBeanPersistListener(BeanPersistListener c1, BeanPersistListener c2) {
|
||||
this(addList(c1, c2));
|
||||
}
|
||||
|
||||
@@ -89,6 +89,12 @@ public class ChainedBeanPersistListener implements BeanPersistListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void softDeleted(Object bean) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
chain[i].softDeleted(bean);
|
||||
}
|
||||
}
|
||||
|
||||
public void inserted(Object bean) {
|
||||
for (int i = 0; i < chain.length; i++) {
|
||||
chain[i].inserted(bean);
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.avaje.ebeaninternal.server.persist;
|
||||
|
||||
import com.avaje.ebean.event.BeanPersistController;
|
||||
import com.avaje.ebeaninternal.api.SpiTransaction;
|
||||
import com.avaje.ebeaninternal.server.core.*;
|
||||
import com.avaje.ebeaninternal.server.deploy.BeanManager;
|
||||
import com.avaje.ebeaninternal.server.core.PersistRequestBean;
|
||||
import com.avaje.ebeaninternal.server.core.PersistRequestCallableSql;
|
||||
import com.avaje.ebeaninternal.server.core.PersistRequestOrmUpdate;
|
||||
import com.avaje.ebeaninternal.server.core.PersistRequestUpdateSql;
|
||||
|
||||
/**
|
||||
* Default PersistExecute implementation using DML statements.
|
||||
@@ -45,45 +46,26 @@ public final class DefaultPersistExecute implements PersistExecute {
|
||||
* execute the bean insert request.
|
||||
*/
|
||||
public <T> void executeInsertBean(PersistRequestBean<T> request) {
|
||||
|
||||
BeanManager<T> mgr = request.getBeanManager();
|
||||
BeanPersister persister = mgr.getBeanPersister();
|
||||
|
||||
BeanPersistController controller = request.getBeanController();
|
||||
if (controller == null || controller.preInsert(request)) {
|
||||
persister.insert(request);
|
||||
}
|
||||
request.executeInsert();
|
||||
}
|
||||
|
||||
/**
|
||||
* execute the bean update request.
|
||||
*/
|
||||
public <T> void executeUpdateBean(PersistRequestBean<T> request) {
|
||||
|
||||
BeanManager<T> mgr = request.getBeanManager();
|
||||
BeanPersister persister = mgr.getBeanPersister();
|
||||
|
||||
BeanPersistController controller = request.getBeanController();
|
||||
if (controller == null || controller.preUpdate(request)) {
|
||||
request.postControllerPrepareUpdate();
|
||||
persister.update(request);
|
||||
}
|
||||
request.executeUpdate();
|
||||
}
|
||||
|
||||
/**
|
||||
* execute the bean delete request.
|
||||
*/
|
||||
public <T> int executeDeleteBean(PersistRequestBean<T> request) {
|
||||
return request.executeDelete();
|
||||
}
|
||||
|
||||
BeanManager<T> mgr = request.getBeanManager();
|
||||
BeanPersister persister = mgr.getBeanPersister();
|
||||
|
||||
BeanPersistController controller = request.getBeanController();
|
||||
if (controller == null || controller.preDelete(request)) {
|
||||
return persister.delete(request);
|
||||
}
|
||||
// delete handled by the BeanController so return 0
|
||||
return 0;
|
||||
@Override
|
||||
public <T> void executeSoftDeleteBean(PersistRequestBean<T> request) {
|
||||
request.executeSoftDelete();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,20 +21,25 @@ public interface PersistExecute {
|
||||
BatchControl createBatchControl(SpiTransaction t);
|
||||
|
||||
/**
|
||||
* Execute a Bean (or MapBean) insert.
|
||||
* Execute a Bean insert.
|
||||
*/
|
||||
<T> void executeInsertBean(PersistRequestBean<T> request);
|
||||
|
||||
/**
|
||||
* Execute a Bean (or MapBean) update.
|
||||
* Execute a Bean update.
|
||||
*/
|
||||
<T> void executeUpdateBean(PersistRequestBean<T> request);
|
||||
|
||||
/**
|
||||
* Execute a Bean (or MapBean) delete.
|
||||
* Execute a Bean delete.
|
||||
*/
|
||||
<T> int executeDeleteBean(PersistRequestBean<T> request);
|
||||
|
||||
/**
|
||||
* Execute soft delete.
|
||||
*/
|
||||
<T> void executeSoftDeleteBean(PersistRequestBean<T> request);
|
||||
|
||||
/**
|
||||
* Execute a Update.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user