001package org.kuali.rice.krms.keyvalues;
002
003import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
004import org.kuali.rice.krms.api.KrmsConstants;
005import org.kuali.rice.krms.api.repository.RuleManagementService;
006import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplate;
007import org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage;
008import org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService;
009import org.kuali.rice.krms.api.repository.typerelation.TypeTypeRelation;
010import org.kuali.rice.krms.impl.repository.KrmsRepositoryServiceLocator;
011import org.kuali.rice.krms.impl.repository.NaturalLanguageTemplateBoService;
012import org.kuali.rice.krms.impl.repository.NaturalLanguageUsageBoService;
013import org.kuali.rice.krms.impl.repository.TypeTypeRelationBoService;
014import org.kuali.student.enrollment.class2.courseoffering.service.decorators.PermissionServiceConstants;
015import org.kuali.student.krms.naturallanguage.util.KsKrmsConstants;
016
017import javax.xml.namespace.QName;
018import java.io.Serializable;
019import java.util.HashMap;
020import java.util.List;
021import java.util.Map;
022import java.util.Set;
023
024public class RuleInstructionKeyValues implements Serializable {
025
026    private static final long serialVersionUID = 1L;
027
028    private transient RuleManagementService ruleManagementService;
029
030
031    public Map<String, String> getKeyValues(Set<String> ruleTypeIds) {
032        Map<String, String> keyValuesInstruction = new HashMap<String, String>();
033        NaturalLanguageUsage usageInstruction = getRuleManagementService().getNaturalLanguageUsageByNameAndNamespace(PermissionServiceConstants.KS_SYS_NAMESPACE, KsKrmsConstants.KRMS_NL_TYPE_INSTRUCTION);
034         //Use Type Type Relation to get Rule Types
035        try {
036            for(String ruleTypeId : ruleTypeIds) {
037                NaturalLanguageTemplate templateInstruction = null;
038                try{
039                    templateInstruction = getRuleManagementService().findNaturalLanguageTemplateByLanguageCodeTypeIdAndNluId("en", ruleTypeId, usageInstruction.getId());
040                }catch (IndexOutOfBoundsException e){
041                    //Ignore, rice error in NaturalLanguageTemplateBoServiceImpl line l
042                }
043
044                if (templateInstruction != null) {
045                    keyValuesInstruction.put(ruleTypeId, templateInstruction.getTemplate());
046                } else {
047                    keyValuesInstruction.put(ruleTypeId, KsKrmsConstants.KRMS_NL_TYPE_INSTRUCTION);
048                }
049            };
050        } catch (Exception ex) {}
051        return keyValuesInstruction;
052    }
053
054    public RuleManagementService getRuleManagementService() {
055        if (ruleManagementService == null) {
056            ruleManagementService = (RuleManagementService) GlobalResourceLoader.getService(new QName(KrmsConstants.Namespaces.KRMS_NAMESPACE_2_0, "ruleManagementService"));
057        }
058        return ruleManagementService;
059    }
060}