package rocks.inspectit.server.processor;
import java.util.Collection;
import javax.persistence.EntityManager;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.cs.storage.processor.AbstractDataProcessor;
/**
* Abstract processor class for CMR data.
*
* @author Ivan Senic
*
*/
public abstract class AbstractCmrDataProcessor {
/**
* Processes many {@link DefaultData} objects.
*
* @param defaultDatas
* Default data objects.
* @param entityManager
* {@link EntityManager} to save data in DB if needed.
*/
public void process(Collection<? extends DefaultData> defaultDatas, EntityManager entityManager) {
for (DefaultData defaultData : defaultDatas) {
process(defaultData, entityManager);
}
}
/**
* Processes one {@link DefaultData} object. This method will check is
* {@link #canBeProcessed(DefaultData)} is true, and then delegate the processing to the
* {@link #processData(DefaultData)} method.
*
* @param defaultData
* Default data object.
* @param entityManager
* {@link EntityManager} to save data in DB if needed.
*/
public void process(DefaultData defaultData, EntityManager entityManager) {
if (canBeProcessed(defaultData)) {
processData(defaultData, entityManager);
}
}
/**
* Concrete method for processing. Implemented by sub-classes.
*
* @param defaultData
* Default data object.
* @param entityManager
* {@link EntityManager} to save data in DB if needed.
*/
protected abstract void processData(DefaultData defaultData, EntityManager entityManager);
/**
* Returns if the {@link DefaultData} object can be processed by this
* {@link AbstractDataProcessor}.
*
* @param defaultData
* Default data object.
* @return True if data can be processed, false otherwise.
*/
public abstract boolean canBeProcessed(DefaultData defaultData);
}