package org.openlmis.core.repository; import lombok.NoArgsConstructor; import org.apache.commons.collections4.*; import org.openlmis.core.domain.StockAdjustmentReason; import org.openlmis.core.domain.StockAdjustmentReasonProgram; import org.openlmis.core.repository.mapper.StockAdjustmentReasonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.List; @Repository @NoArgsConstructor public class StockAdjustmentReasonRepository { @Autowired StockAdjustmentReasonMapper adjustmentReasonMapper; public List<StockAdjustmentReason> getAdjustmentReasons(final Boolean additive, final Long programId, final StockAdjustmentReason.Category category) { // determine master list by program / no program List<StockAdjustmentReason> reasons; if (programId != null) { reasons = adjustmentReasonMapper.getAllByProgram(programId); } else { reasons = adjustmentReasonMapper.getAllDefault(); } // filter out reasons based on additive and category arguments CollectionUtils.filter(reasons, new Predicate<StockAdjustmentReason>() { @Override public boolean evaluate(StockAdjustmentReason reason) { // remove if category is given and we're not in it if(null != category && false == reason.inCategory(category)) return false; // remove if additive is given and we're not of the same additive/not-additive if(null != additive && reason.getAdditive() != additive) return false; return true; // gautlet passed } }); return reasons; } public StockAdjustmentReason getAdjustmentReasonByName(String name) { return adjustmentReasonMapper.getByName(name); } public void insertAdjustmentReason(StockAdjustmentReason reason) { adjustmentReasonMapper.insert(reason); } public StockAdjustmentReasonProgram getAdjustmentReasonProgram(String programCode, String reasonName) { return adjustmentReasonMapper.getAdjustmentReasonProgram(programCode, reasonName); } public void insertAdjustmentReasonProgram(StockAdjustmentReasonProgram entry) { adjustmentReasonMapper.insertAdjustmentReasonProgram(entry); } public void updateAdjustmentReasonProgram(StockAdjustmentReasonProgram entry) { adjustmentReasonMapper.updateAdjustmentReasonProgram(entry); } }