001 /**
002 * Copyright 2005-2013 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 */
016 package org.kuali.rice.edl.impl.dao.impl;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import javax.persistence.EntityManager;
022 import javax.persistence.PersistenceContext;
023
024 import org.kuali.rice.core.framework.persistence.jpa.OrmUtils;
025 import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria;
026 import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria;
027 import org.kuali.rice.edl.impl.bo.EDocLiteAssociation;
028 import org.kuali.rice.edl.impl.bo.EDocLiteDefinition;
029 import org.kuali.rice.edl.impl.dao.EDocLiteDAO;
030
031 /**
032 * JPA implementation of the EDOcLiteDAO
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 */
036 public class EDocLiteDAOJpaImpl implements EDocLiteDAO {
037 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EDocLiteDAOJpaImpl.class);
038
039 private static final String ACTIVE_IND_CRITERIA = "activeInd";
040 private static final String NAME_CRITERIA = "name";
041
042 @PersistenceContext(unitName = "kew-unit")
043 private EntityManager entityManager;
044
045 /**
046 * Save a EDocLiteDefinition
047 *
048 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#saveEDocLiteDefinition(org.kuali.rice.edl.impl.bo.EDocLiteDefinition)
049 */
050 public void saveEDocLiteDefinition(final EDocLiteDefinition edocLiteData) {
051 if (edocLiteData.getEDocLiteDefId() == null) {
052 entityManager.persist(edocLiteData);
053 } else {
054 OrmUtils.merge(entityManager, edocLiteData);
055 }
056 }
057
058 /**
059 * Save a EDocLiteAssocitaion
060 *
061 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#saveEDocLiteAssociation(org.kuali.rice.edl.impl.bo.EDocLiteAssociation)
062 */
063 public void saveEDocLiteAssociation(final EDocLiteAssociation assoc) {
064 if (assoc.getEdocLiteAssocId() == null) {
065 entityManager.persist(assoc);
066 } else {
067 OrmUtils.merge(entityManager, assoc);
068 }
069 }
070
071 /**
072 * Get a EDocLiteDefinition
073 *
074 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#getEDocLiteDefinition(java.lang.String)
075 */
076 public EDocLiteDefinition getEDocLiteDefinition(final String defName) {
077 final Criteria crit = new Criteria(EDocLiteDefinition.class.getName());
078 crit.eq(NAME_CRITERIA, defName);
079 crit.eq(ACTIVE_IND_CRITERIA, Boolean.TRUE);
080 return (EDocLiteDefinition) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
081 }
082
083 /**
084 * Get a EDocLiteAssociation
085 *
086 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#getEDocLiteAssociation(java.lang.String)
087 */
088 public EDocLiteAssociation getEDocLiteAssociation(final String docTypeName) {
089 final Criteria crit = new Criteria(EDocLiteAssociation.class.getName());
090 crit.eq("edlName", docTypeName);
091 crit.eq(ACTIVE_IND_CRITERIA, Boolean.TRUE);
092 return (EDocLiteAssociation) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
093 }
094
095 /**
096 * Returns the names of all active Definitions
097 *
098 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#getEDocLiteDefinitions()
099 */
100 @SuppressWarnings("unchecked")
101 public List<String> getEDocLiteDefinitions() {
102 final Criteria crit = new Criteria(EDocLiteDefinition.class.getName());
103 crit.eq(ACTIVE_IND_CRITERIA, Boolean.TRUE);
104
105 final List<EDocLiteDefinition> defs = (List<EDocLiteDefinition>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
106 final ArrayList<String> names = new ArrayList<String>(defs.size());
107 for (EDocLiteDefinition def : defs) {
108 names.add(def.getName());
109 }
110 return names;
111 }
112
113 /**
114 * Returns all active Definitions
115 *
116 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#getEDocLiteAssociations()
117 */
118 @SuppressWarnings("unchecked")
119 public List<EDocLiteAssociation> getEDocLiteAssociations() {
120 final Criteria crit = new Criteria(EDocLiteAssociation.class.getName());
121 crit.eq(ACTIVE_IND_CRITERIA, Boolean.TRUE);
122 return (List<EDocLiteAssociation>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
123 }
124
125 /**
126 * Finds matching Associations
127 *
128 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#search(org.kuali.rice.edl.impl.bo.EDocLiteAssociation)
129 */
130 @SuppressWarnings("unchecked")
131 public List<EDocLiteAssociation> search(final EDocLiteAssociation edocLite) {
132 final Criteria crit = new Criteria(EDocLiteAssociation.class.getName());
133 if (edocLite.getActiveInd() != null) {
134 crit.eq(ACTIVE_IND_CRITERIA, edocLite.getActiveInd());
135 }
136 if (edocLite.getDefinition() != null) {
137 crit.like("UPPER(definition)", "%" + edocLite.getDefinition().toUpperCase() + "%");
138 }
139 if (edocLite.getEdlName() != null) {
140 crit.like("UPPER(edlName)", "%" + edocLite.getEdlName().toUpperCase() + "%");
141 }
142 if (edocLite.getStyle() != null) {
143 crit.like("UPPER(style)", "%" + edocLite.getStyle().toUpperCase() + "%");
144 }
145 return (List<EDocLiteAssociation>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
146 }
147
148 /**
149 * Returns a specific Association
150 *
151 * @see org.kuali.rice.edl.impl.dao.EDocLiteDAO#getEDocLiteAssociation(java.lang.Long)
152 */
153 public EDocLiteAssociation getEDocLiteAssociation(final Long associationId) {
154 final Criteria crit = new Criteria(EDocLiteAssociation.class.getName());
155 crit.eq("edocLiteAssocId", associationId);
156 return (EDocLiteAssociation) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
157 }
158
159 public EntityManager getEntityManager() {
160 return this.entityManager;
161 }
162
163 public void setEntityManager(EntityManager entityManager) {
164 this.entityManager = entityManager;
165 }
166 }