package org.openlmis.core.view.viewmodel; import org.apache.commons.lang3.StringUtils; import org.openlmis.core.manager.MovementReasonManager; import org.openlmis.core.model.ProgramDataColumn; import org.openlmis.core.model.ProgramDataFormItem; import java.util.ArrayList; import java.util.List; import lombok.Data; @Data public class RapidTestFormGridViewModel { ColumnCode columnCode; String consumptionValue = ""; String positiveValue = ""; ProgramDataColumn positiveColumn; ProgramDataColumn consumeColumn; final static String COLUMN_CODE_PREFIX_CONSUME = "CONSUME_"; final static String COLUMN_CODE_PREFIX_POSITIVE = "POSITIVE_"; RapidTestFormGridViewModel(ColumnCode columnCode) { this.columnCode = columnCode; } public boolean validate() { try { return isEmpty() || Long.parseLong(consumptionValue) >= Long.parseLong(positiveValue); } catch (NumberFormatException e) { return false; } } public void setValue(ProgramDataColumn column, int value) { if (column.getCode().contains("CONSUME")) { consumeColumn = column; setConsumptionValue(String.valueOf(value)); } else { positiveColumn = column; setPositiveValue(String.valueOf(value)); } } public List<ProgramDataFormItem> convertFormGridViewModelToDataModel(MovementReasonManager.MovementReason issueReason) { List<ProgramDataFormItem> programDataFormItems = new ArrayList<>(); if (!StringUtils.isEmpty(getConsumptionValue())) { if (consumeColumn == null) { consumeColumn = new ProgramDataColumn(); consumeColumn.setCode(generateFullColumnName(COLUMN_CODE_PREFIX_CONSUME)); } ProgramDataFormItem consumeDataFormItem = new ProgramDataFormItem(issueReason.getCode(), consumeColumn, Integer.parseInt(getConsumptionValue())); programDataFormItems.add(consumeDataFormItem); } if (!StringUtils.isEmpty(getPositiveValue())) { if (positiveColumn == null) { positiveColumn = new ProgramDataColumn(); positiveColumn.setCode(generateFullColumnName(COLUMN_CODE_PREFIX_POSITIVE)); } ProgramDataFormItem positiveDataFormItem = new ProgramDataFormItem(issueReason.getCode(), positiveColumn, Integer.parseInt(getPositiveValue())); programDataFormItems.add(positiveDataFormItem); } return programDataFormItems; } public String generateFullColumnName(String prefix) { return prefix + StringUtils.upperCase(getColumnCode().name()); } public boolean isEmpty() { return StringUtils.isEmpty(consumptionValue) && StringUtils.isEmpty(positiveValue); } public void clear(boolean isConsume) { if (isConsume) { consumptionValue = ""; } else { positiveValue = ""; } } public void setValue(boolean isConsume, String value) { if (isConsume) { consumptionValue = value; } else { positiveValue = value; } } public enum ColumnCode { HIVDetermine, HIVUnigold, Syphillis, Malaria; @Override public String toString() { return StringUtils.upperCase(name()); } } }