package net.techreadiness.batch.device; import java.util.Date; import java.util.List; import javax.inject.Inject; import net.techreadiness.service.OrganizationService; import net.techreadiness.service.ServiceContext; import net.techreadiness.service.common.ValidationError; import net.techreadiness.service.exception.ValidationServiceException; import net.techreadiness.service.object.Device; import net.techreadiness.service.object.Org; import org.springframework.batch.item.ItemWriter; import com.google.common.collect.Lists; public class DeviceWriter extends AbstractDeviceStep implements ItemWriter<DeviceData> { @Inject private OrganizationService organizationService; int deviceErrorCount = 0; @Override public void write(List<? extends DeviceData> items) throws Exception { ServiceContext serviceContext = getServiceContext(); for (final DeviceData deviceData : items) { List<ValidationError> errors = Lists.newArrayList(); try { if (deviceData.getDevice().getCount() != null && deviceData.getDevice().getCount() == 0) { break; } if (userService.hasAccessToOrgByCode(getServiceContext(), getUserId(), deviceData.getCombinedCode())) { String combinedCode = deviceData.getCombinedCode(); Org org = organizationService.getByCode(getServiceContext(), combinedCode); deviceService.persist(serviceContext, deviceData.getDevice(), deviceData.getCombinedCode()); Device device = deviceData.getDevice(); Boolean dataIsIncomplete = checkForMissingData(device); if (dataIsIncomplete && org.getDataEntryComplete() != null && org.getDataEntryComplete().equals("true")) { org.setDataEntryComplete("false"); org.setDataEntryCompleteUser(getServiceContext().getUserName()); org.setDataEntryCompleteDate(new Date()); organizationService.addOrUpdate(getServiceContext(), org); } } else { addNotAllowedError(errors, deviceData.getCombinedCode(), "add"); } } catch (ValidationServiceException vse) { errors.addAll(vse.getFaultInfo().getAttributeErrors()); } catch (Exception e) { addGeneralError(errors, e); } throwIfErrors(errors); } } public Boolean checkForMissingData(Device device) { int deviceErrorCount = 0; if (device.getOperatingSystem() == null) { deviceErrorCount++; } if (device.getMemory() == null) { deviceErrorCount++; } if (device.getScreenResolution() == null) { deviceErrorCount++; } if (device.getMonitorDisplaySize() == null) { deviceErrorCount++; } if (device.getEnvironment() == null) { deviceErrorCount++; } if (deviceErrorCount == 0) { return false; } return true; } }