001package org.kuali.ole.describe.rule;
002
003import org.kuali.ole.OLEConstants;
004import org.kuali.ole.describe.bo.OlePrivacy;
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 * OlePrivacyRule validates maintenance object for Privacy Maintenance Document
014 */
015public class OlePrivacyRule extends MaintenanceDocumentRuleBase {
016
017
018    protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
019        boolean isValid = true;
020        OlePrivacy OlePrivacy = (OlePrivacy) document.getNewMaintainableObject().getDataObject();
021
022        isValid &= validatePrivacyCode(OlePrivacy);
023        return isValid;
024    }
025
026    /**
027     * This method  validates duplicate privacy Id and return boolean value.
028     *
029     * @param olePrivacy
030     * @return boolean
031     */
032    private boolean validatePrivacyCode(OlePrivacy olePrivacy) {
033
034        if (olePrivacy.getPrivacyCode() != null) {
035
036            Map<String, String> criteria = new HashMap<String, String>();
037
038            criteria.put(OLEConstants.OlePrivacy.PRIVACY_CD, olePrivacy.getPrivacyCode());
039
040            List<OlePrivacy> privacyCodeInDatabase = (List<OlePrivacy>) getBoService().findMatching(OlePrivacy.class, criteria);
041
042            if ((privacyCodeInDatabase.size() > 0)) {
043
044                for (OlePrivacy privacyCodeObj : privacyCodeInDatabase) {
045                    String privacyId = privacyCodeObj.getPrivacyId();
046                    if (null == olePrivacy.getPrivacyId() ||
047                            !(olePrivacy.getPrivacyId().equalsIgnoreCase(privacyId))) {
048                        this.putFieldError(OLEConstants.OlePrivacy.PRIVACY_CODE, "error.duplicate.code");
049                        return false;
050                    }
051                }
052            }
053            return true;
054        }
055        return false;
056    }
057}