001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kew.rule.dao.impl;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.core.api.criteria.OrderByField;
020import org.kuali.rice.core.api.criteria.OrderDirection;
021import org.kuali.rice.core.api.criteria.Predicate;
022import org.kuali.rice.core.api.criteria.QueryResults;
023import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
024import org.kuali.rice.kew.rule.dao.RuleTemplateDAO;
025import org.kuali.rice.krad.data.DataObjectService;
026import org.kuali.rice.krad.data.PersistenceOption;
027import org.kuali.rice.krad.data.platform.MaxValueIncrementerFactory;
028import org.springframework.beans.factory.annotation.Required;
029import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
030
031import javax.persistence.EntityManager;
032import javax.sql.DataSource;
033import java.util.ArrayList;
034import java.util.List;
035
036import static org.kuali.rice.core.api.criteria.PredicateFactory.equal;
037import static org.kuali.rice.core.api.criteria.PredicateFactory.likeIgnoreCase;
038
039
040public class RuleTemplateDAOJpa implements RuleTemplateDAO {
041
042    private static final String SEQUENCE_NAME = "KREW_RTE_TMPL_S";
043
044        private EntityManager entityManager;
045    private DataObjectService dataObjectService;
046
047    private DataSource dataSource;
048        
049    public List<RuleTemplateBo> findAll() {
050        org.kuali.rice.core.api.criteria.QueryByCriteria.Builder builder =
051                org.kuali.rice.core.api.criteria.QueryByCriteria.Builder.create();
052
053        return getDataObjectService().findMatching(RuleTemplateBo.class,builder.build()).getResults();
054    }
055
056    public RuleTemplateBo findByRuleTemplateName(String ruleTemplateName) {
057        if (StringUtils.isBlank(ruleTemplateName)) {
058                return null;
059        }
060
061        org.kuali.rice.core.api.criteria.QueryByCriteria.Builder builder =
062                org.kuali.rice.core.api.criteria.QueryByCriteria.Builder.create();
063        builder.setPredicates(equal("name",ruleTemplateName));
064        builder.setOrderByFields(OrderByField.Builder.create("name", OrderDirection.DESCENDING).build());
065
066        QueryResults<RuleTemplateBo> ruleTemplates = getDataObjectService().findMatching(RuleTemplateBo.class,builder.build());
067
068        if(ruleTemplates==null || ruleTemplates.getResults() == null || ruleTemplates.getResults().isEmpty()){
069                return null;
070        }
071        return (RuleTemplateBo) ruleTemplates.getResults().get(0);
072    }
073
074    public List<RuleTemplateBo> findByRuleTemplate(RuleTemplateBo ruleTemplate) {
075        org.kuali.rice.core.api.criteria.QueryByCriteria.Builder builder =
076                org.kuali.rice.core.api.criteria.QueryByCriteria.Builder.create();
077        List<Predicate> predicates = new ArrayList<Predicate>();
078
079        if (ruleTemplate.getName() != null) {
080          predicates.add(likeIgnoreCase("name",ruleTemplate.getName()));
081        }
082        if (ruleTemplate.getDescription() != null) {
083            predicates.add(likeIgnoreCase("description",ruleTemplate.getDescription()));
084        }
085        Predicate[] preds = predicates.toArray(new Predicate[predicates.size()]);
086        builder.setPredicates(preds);
087        QueryResults<RuleTemplateBo> results = getDataObjectService().
088                    findMatching(RuleTemplateBo.class, builder.build());
089        return results.getResults();
090    }
091
092    public void delete(String ruleTemplateId) {
093        getDataObjectService().delete(findByRuleTemplateId(ruleTemplateId));
094    }
095
096    public RuleTemplateBo findByRuleTemplateId(String ruleTemplateId) {
097        return getDataObjectService().find(RuleTemplateBo.class, ruleTemplateId);
098     }
099
100    public RuleTemplateBo save(RuleTemplateBo ruleTemplate) {
101        return getDataObjectService().save(ruleTemplate, PersistenceOption.FLUSH);
102    }
103
104    public String getNextRuleTemplateId() {
105        DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(
106                getDataSource(), SEQUENCE_NAME);
107        return incrementer.nextStringValue();
108    }
109
110    public EntityManager getEntityManager() {
111        return this.entityManager;
112    }
113
114    public void setEntityManager(EntityManager entityManager) {
115        this.entityManager = entityManager;
116    }
117
118    public DataSource getDataSource() {
119        return dataSource;
120    }
121
122    @Required
123    public void setDataSource(DataSource dataSource) {
124        this.dataSource = dataSource;
125    }
126
127    public DataObjectService getDataObjectService() {
128        return dataObjectService;
129    }
130
131    @Required
132    public void setDataObjectService(DataObjectService dataObjectService) {
133        this.dataObjectService = dataObjectService;
134    }
135}