/* 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.activiti.engine.delegate.event;
/**
* Base event listener that can be used when implementing an
* {@link ActivitiEventListener} to get notified when an entity is created,
* updated, deleted or if another entity-related event occurs.
*
* Override the <code>onXX(..)</code> methods to respond to entity changes
* accordingly.
*
* @author Frederik Heremans
*
*/
public class BaseEntityEventListener implements ActivitiEventListener {
protected boolean failOnException = false;
protected Class<?> entityClass;
/**
* Create a new BaseEntityEventListener, notified when an event that targets
* any type of entity is received. Returning true when
* {@link #isFailOnException()} is called.
*/
public BaseEntityEventListener() {
this(true, null);
}
/**
* Create a new BaseEntityEventListener.
*
* @param failOnException
* return value for {@link #isFailOnException()}.
*/
public BaseEntityEventListener(boolean failOnException) {
this(failOnException, null);
}
public BaseEntityEventListener(boolean failOnException, Class<?> entityClass) {
this.failOnException = failOnException;
this.entityClass = entityClass;
}
@Override
public final void onEvent(ActivitiEvent event) {
if(isValidEvent(event)) {
// Check if this event
if (event.getType() == ActivitiEventType.ENTITY_CREATED) {
onCreate(event);
} else if (event.getType() == ActivitiEventType.ENTITY_INITIALIZED) {
onInitialized(event);
} else if (event.getType() == ActivitiEventType.ENTITY_DELETED) {
onDelete(event);
} else if (event.getType() == ActivitiEventType.ENTITY_UPDATED) {
onUpdate(event);
} else {
// Entity-specific event
onEntityEvent(event);
}
}
}
@Override
public boolean isFailOnException() {
return failOnException;
}
/**
* @return true, if the event is an {@link ActivitiEntityEvent} and (if needed) the entityClass
* set in this instance, is assignable from the entity class in the event.
*/
protected boolean isValidEvent(ActivitiEvent event) {
boolean valid = false;
if(event instanceof ActivitiEntityEvent) {
if(entityClass == null) {
valid = true;
} else {
valid = entityClass.isAssignableFrom(((ActivitiEntityEvent) event).getEntity().getClass());
}
}
return valid;
}
/**
* Called when an entity create event is received.
*/
protected void onCreate(ActivitiEvent event) {
// Default implementation is a NO-OP
}
/**
* Called when an entity initialized event is received.
*/
protected void onInitialized(ActivitiEvent event) {
// Default implementation is a NO-OP
}
/**
* Called when an entity delete event is received.
*/
protected void onDelete(ActivitiEvent event) {
// Default implementation is a NO-OP
}
/**
* Called when an entity update event is received.
*/
protected void onUpdate(ActivitiEvent event) {
// Default implementation is a NO-OP
}
/**
* Called when an event is received, which is not a create, an update or
* delete.
*/
protected void onEntityEvent(ActivitiEvent event) {
// Default implementation is a NO-OP
}
}