package net.techreadiness.batch.device;
import java.util.List;
import net.techreadiness.service.ServiceContext;
import net.techreadiness.service.common.ValidationError;
import net.techreadiness.service.exception.ValidationServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.item.ItemWriter;
import com.google.common.collect.Lists;
public class DeviceEraser extends AbstractDeviceStep implements ItemWriter<DeviceData>, StepExecutionListener {
private final Logger log = LoggerFactory.getLogger(DeviceEraser.class);
@Override
public void write(List<? extends DeviceData> items) throws Exception {
ServiceContext serviceContext = getServiceContext();
log.debug("Attempting to delete {} devices.", items.size());
for (final DeviceData deviceData : items) {
List<ValidationError> errors = Lists.newArrayList();
try {
deviceService.deleteAllByOrgCode(serviceContext, deviceData.getCombinedCode());
} catch (ValidationServiceException vse) {
errors.addAll(vse.getFaultInfo().getAttributeErrors());
} catch (Exception e) {
addGeneralError(errors, e);
}
throwIfErrors(errors);
}
}
@Override
public void beforeStep(StepExecution stepExecution) {
// Nothing to do before the step
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
stepExecution.getJobExecution().getExecutionContext()
.putInt("device.org.delete.count", stepExecution.getWriteCount());
return null;
}
}