001package org.kuali.rice.krms.service.impl;
002
003import org.kuali.rice.krms.framework.engine.expression.ComparisonOperator;
004import org.kuali.rice.krms.builder.ComponentBuilder;
005import org.kuali.rice.krms.service.TemplateRegistry;
006import org.kuali.rice.krms.dto.TemplateInfo;
007
008import java.util.HashMap;
009import java.util.Map;
010
011/**
012 * @author Christoff
013 * Date: 2013/01/10
014 */
015public class TemplateRegistryImpl implements TemplateRegistry {
016
017    private Map<String, TemplateInfo> templatesMap;
018    private Map<String, ComponentBuilder> componentBuilderMap = new HashMap<String, ComponentBuilder>();
019
020    public void setTemplatesMap(Map<String, TemplateInfo> templatesMap) {
021        this.templatesMap = templatesMap;
022    }
023
024    public TemplateInfo getTemplateForType(String type) {
025        TemplateInfo template = templatesMap.get(type);
026        return (template != null ? template : null);
027    }
028
029    public String getTermSpecNameForType(String type) {
030        TemplateInfo template = templatesMap.get(type);
031        return (template != null ? template.getTermSpecName() : null);
032    }
033
034    public String getOperationForType(String type) {
035        TemplateInfo template = templatesMap.get(type);
036        if (template == null) {
037            return null;
038        }
039        ComparisonOperator operator = ComparisonOperator.fromCode(template.getOperator());
040        return (operator != null ? operator.getCode() : null);
041    }
042
043    public String getValueForType(String type) {
044        TemplateInfo template = templatesMap.get(type);
045        return (template != null ? template.getValue() : null);
046    }
047
048    public ComponentBuilder getComponentBuilderForType(String type){
049        TemplateInfo template = templatesMap.get(type);
050        if ((template == null) || (template.getComponentBuilderClass() == null)){
051            return null;
052        }
053
054        ComponentBuilder builder = componentBuilderMap.get(template.getComponentBuilderClass());
055        if (builder == null){
056            try {
057                builder = (ComponentBuilder) Class.forName(template.getComponentBuilderClass()).newInstance();
058                componentBuilderMap.put(template.getComponentBuilderClass(), builder);
059            } catch (InstantiationException e) {
060                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
061            } catch (IllegalAccessException e) {
062                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
063            } catch (ClassNotFoundException e) {
064                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
065            }
066        }
067
068        return builder;
069    }
070
071}