001package org.kuali.ole.describe.rule;
002
003import org.kuali.ole.OLEConstants;
004import org.kuali.ole.describe.bo.OleEncodingLevel;
005import org.kuali.rice.krad.maintenance.MaintenanceDocument;
006import org.kuali.rice.krad.rules.MaintenanceDocumentRuleBase;
007
008import java.util.HashMap;
009import java.util.List;
010import java.util.Map;
011
012/**
013 * OleEncodingLevelRule validates maintenance object for Encoding Level Maintenance Document
014 */
015public class OleEncodingLevelRule extends MaintenanceDocumentRuleBase {
016
017
018    protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
019        boolean isValid = true;
020        OleEncodingLevel oleEncodingLevel = (OleEncodingLevel) document.getNewMaintainableObject().getDataObject();
021
022        isValid &= validateEncodingLevelCode(oleEncodingLevel);
023        return isValid;
024    }
025
026    /**
027     * This method  validates duplicate encodingLevel Id and return boolean value.
028     *
029     * @param oleEncodingLevel
030     * @return boolean
031     */
032    private boolean validateEncodingLevelCode(OleEncodingLevel oleEncodingLevel) {
033
034        if (oleEncodingLevel.getEncodingLevelCode() != null) {
035
036            Map<String, String> criteria = new HashMap<String, String>();
037
038            criteria.put(OLEConstants.OleEncodingLevel.ENCODING_LEVEL_CD, oleEncodingLevel.getEncodingLevelCode());
039
040
041            List<OleEncodingLevel> encodingLevelInDatabase = (List<OleEncodingLevel>) getBoService().findMatching(OleEncodingLevel.class, criteria);
042
043            if ((encodingLevelInDatabase.size() > 0)) {
044                for (OleEncodingLevel oleEncodingLevelObj : encodingLevelInDatabase) {
045                    Integer encodingLevelId = oleEncodingLevelObj.getEncodingLevelId();
046                    if (null == oleEncodingLevel.getEncodingLevelId() || oleEncodingLevel.getEncodingLevelId().intValue() != encodingLevelId) {
047                        this.putFieldError(OLEConstants.OleEncodingLevel.ENCODING_LEVEL_CODE, "error.duplicate.code");
048                        return false;
049                    }
050                }
051            }
052        }
053
054        return true;
055    }
056}