package fi.otavanopisto.pyramus.util.dataimport;
import java.util.Set;
import javax.validation.ConstraintViolation;
import fi.internetix.smvc.SmvcRuntimeException;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.SystemDAO;
import fi.otavanopisto.pyramus.framework.PyramusStatusCode;
@SuppressWarnings("rawtypes")
public class DefaultEntityHandlingStrategy implements EntityHandlingStrategy {
private EntityImportStrategy entityStrategy;
public DefaultEntityHandlingStrategy(Class entityClass, EntityImportStrategy entityStrategy) {
this.entityClass = entityClass;
this.entityStrategy = entityStrategy;
}
@Override
public void handleValue(String fieldName, Object value, DataImportContext context)
throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException {
FieldHandlingStrategy fieldHandler = DataImportStrategyProvider.instance().getFieldHandler(entityStrategy, fieldName);
if (fieldHandler == null)
throw new NoSuchFieldException("Entity handler cannot find required field handler: " + fieldName);
fieldHandler.handleField(fieldName, value, context);
}
private Class entityClass;
public void initializeContext(DataImportContext context) {
}
protected void bindEntities(DataImportContext context) {
}
@Override
public void saveEntities(DataImportContext context) {
bindEntities(context);
Object[] entities = context.getEntities();
SystemDAO systemDAO = DAOFactory.getInstance().getSystemDAO();
for (int i = 0; i < entities.length; i++) {
Object entity = entities[i];
Set<ConstraintViolation<Object>> constraintViolations = systemDAO.validateEntity(entity);
if (constraintViolations.isEmpty()) {
systemDAO.persistEntity(entity);
} else {
String message = "";
for (ConstraintViolation<Object> constraintViolation : constraintViolations) {
message += constraintViolation.getMessage() + '\n';
}
throw new SmvcRuntimeException(PyramusStatusCode.VALIDATION_FAILURE, "Validation failure: " + message);
}
}
}
@Override
public Class getMainEntityClass() {
return entityClass;
}
}