package org.oregami.service;
import org.oregami.data.GenericDAOUUID;
import org.oregami.entities.BaseEntityUUID;
import org.oregami.entities.CustomRevisionListener;
import org.oregami.util.validation.IEntityValidator;
import java.util.List;
import java.util.NoSuchElementException;
public abstract class TopLevelEntityService<T extends BaseEntityUUID> {
public abstract GenericDAOUUID<T, String> getDao();
public ServiceResult<T> createNewEntity(T entityData, ServiceCallContext context) {
IEntityValidator validator = buildEntityValidator(entityData);
List<ServiceError> errorMessages = validator.validateForCreation();
if (errorMessages.size() == 0) {
T entity = entityData;
CustomRevisionListener.context.set(context);
getDao().save(entity);
}
return new ServiceResult<>(entityData, errorMessages);
}
public ServiceResult<T> updateEntity(T entityData, ServiceCallContext context) {
IEntityValidator validator = buildEntityValidator(entityData);
List<ServiceError> errorMessages = validator.validateForUpdate();
if (errorMessages.size() == 0) {
T entity = entityData;
CustomRevisionListener.context.set(context);
getDao().update(entity);
}
return new ServiceResult<>(entityData, errorMessages);
}
public void deleteEntity(String id) {
T entity = getDao().findOne(id);
if (entity==null) {
throw new NoSuchElementException();
}
getDao().delete(entity);
}
public abstract IEntityValidator buildEntityValidator(T entity);
}