package rocks.inspectit.server.processor;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import rocks.inspectit.shared.all.communication.DefaultData;
/**
* Abstract data processor that passes data to chained processors.
*
* @author Ivan Senic
*
*/
public abstract class AbstractChainedCmrDataProcessor extends AbstractCmrDataProcessor {
/**
* List of chained processors.
*/
private List<AbstractCmrDataProcessor> dataProcessors;
/**
* Default constructor.
*/
public AbstractChainedCmrDataProcessor() {
dataProcessors = new ArrayList<>();
}
/**
* Secondary constructor.
*
* @param dataProcessors
* List of chained processors.
*/
public AbstractChainedCmrDataProcessor(List<AbstractCmrDataProcessor> dataProcessors) {
this.dataProcessors = dataProcessors;
}
/**
* Should the data be passed to the chained processors.
*
* @param defaultData
* {@link DefaultData}.
* @return True if it should be passed, false otherwise.
*/
protected abstract boolean shouldBePassedToChainedProcessors(DefaultData defaultData);
/**
* {@inheritDoc}
*/
@Override
protected void processData(DefaultData defaultData, EntityManager entityManager) {
if (shouldBePassedToChainedProcessors(defaultData)) {
passToChainedProcessors(defaultData, entityManager);
}
}
/**
* Passed the default data to all chained processors.
*
* @param defaultData
* Data to pass.
* @param entityManager
* {@link EntityManager} to save data in DB if needed.
*/
protected void passToChainedProcessors(DefaultData defaultData, EntityManager entityManager) {
if (null != dataProcessors) {
for (AbstractCmrDataProcessor dataProcessor : dataProcessors) {
dataProcessor.process(defaultData, entityManager);
}
}
}
}