001package org.kuali.rice.krms.tree;
002
003import org.apache.commons.lang.StringEscapeUtils;
004import org.apache.commons.lang.StringUtils;
005import org.kuali.rice.krms.api.repository.NaturalLanguageTree;
006import org.kuali.rice.krms.api.repository.RuleManagementService;
007import org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage;
008import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition;
009import org.kuali.rice.krms.api.repository.proposition.PropositionDefinitionContract;
010import org.kuali.rice.krms.api.repository.rule.RuleDefinitionContract;
011import org.kuali.rice.krms.dto.PropositionEditor;
012import org.kuali.rice.krms.dto.RuleEditor;
013import org.kuali.student.enrollment.class1.krms.dto.EnrolPropositionEditor;
014import org.kuali.student.enrollment.class1.krms.dto.EnrolRuleEditor;
015import org.kuali.student.enrollment.class2.courseoffering.service.decorators.PermissionServiceConstants;
016import org.kuali.student.krms.naturallanguage.util.KsKrmsConstants;
017
018import java.io.Serializable;
019import java.util.Iterator;
020import java.util.LinkedList;
021import java.util.Queue;
022
023/**
024 * Created with IntelliJ IDEA.
025 * User: SW
026 * Date: 2013/02/25
027 * Time: 2:12 PM
028 * To change this template use File | Settings | File Templates.
029 */
030public abstract class AbstractTreeBuilder implements TreeBuilder {
031
032    private RuleManagementService ruleManagementService;
033
034    public RuleManagementService getRuleManagementService() {
035        return ruleManagementService;
036    }
037
038    public void setRuleManagementService(RuleManagementService ruleManagementService) {
039        this.ruleManagementService = ruleManagementService;
040    }
041
042    protected String buildNodeLabel(RuleDefinitionContract rule, PropositionDefinitionContract prop){
043        return StringEscapeUtils.escapeHtml(this.getDescription(prop));
044    }
045
046    protected String getDescription(PropositionDefinitionContract proposition) {
047        if (proposition == null) {
048            return StringUtils.EMPTY;
049        }
050
051        //Return translated nl if exist.
052        if (proposition instanceof PropositionEditor){
053            PropositionEditor editor = (PropositionEditor) proposition;
054            return editor.getNaturalLanguageForUsage(this.getNaturalLanguageUsageKey());
055        }
056
057        //Return the description
058        if (proposition.getDescription() != null){
059            return proposition.getDescription();
060        }
061
062        return StringUtils.EMPTY;
063    }
064
065    protected String getPropositionPrefix(RuleEditor rule, PropositionEditor prop){
066        if (rule == null){
067            return StringUtils.EMPTY;
068        }
069
070        //Add the proposition with alpha code in the map if it doesn't already exist.
071        if (null == prop.getKey()) {
072            prop.setKey((String) rule.getAlpha().next());
073        }
074
075        //Build the prefix.
076        return "<b>" + prop.getKey() + ".</b> ";
077    }
078
079    public String getNaturalLanguageUsageKey(){
080        return  KsKrmsConstants.KRMS_NL_PREVIEW;
081    }
082
083}