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.edl.impl.dao.impl; 017 018import java.util.ArrayList; 019import java.util.List; 020 021import org.kuali.rice.core.api.criteria.Predicate; 022import org.kuali.rice.core.api.criteria.QueryByCriteria; 023import org.kuali.rice.edl.impl.bo.EDocLiteAssociation; 024import org.kuali.rice.edl.impl.bo.EDocLiteDefinition; 025import org.kuali.rice.edl.impl.dao.EDocLiteDAO; 026import org.kuali.rice.krad.data.DataObjectService; 027import org.kuali.rice.krad.data.PersistenceOption; 028 029import static org.kuali.rice.core.api.criteria.PredicateFactory.*; 030 031/** 032 * JPA implementation of the EDOcLiteDAO 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036public class EDocLiteDAOJpaImpl implements EDocLiteDAO { 037 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EDocLiteDAOJpaImpl.class); 038 039 /** static value for active indicator */ 040 private static final String ACTIVE_IND_CRITERIA = "activeInd"; 041 042 /** static value for name */ 043 private static final String NAME_CRITERIA = "name"; 044 045 //** static value for edl name */ 046 private static final String EDL_NAME = "edlName"; 047 048 /** static value for UPPER */ 049 private static final String UPPER = "UPPER"; 050 051 /** static value for definition */ 052 private static final String DEFINITION = "definition"; 053 054 /** static value for style */ 055 private static final String STYLE = "style"; 056 057 /** Service that persists data to and from the underlying datasource. */ 058 private DataObjectService dataObjectService; 059 060 /** 061 * Returns the data object service. 062 * @return the {@link DataObjectService} 063 */ 064 public DataObjectService getDataObjectService() { 065 return this.dataObjectService; 066 } 067 068 /** 069 * 070 * @see #getDataObjectService() 071 */ 072 public void setDataObjectService(DataObjectService dataObjectService) { 073 this.dataObjectService = dataObjectService; 074 } 075 076 /** 077 * {@inheritDoc} 078 */ 079 @Override 080 public EDocLiteDefinition saveEDocLiteDefinition(final EDocLiteDefinition edocLiteData) { 081 return this.dataObjectService.save(edocLiteData, PersistenceOption.FLUSH); 082 } 083 084 /** 085 * {@inheritDoc} 086 */ 087 @Override 088 public EDocLiteAssociation saveEDocLiteAssociation(final EDocLiteAssociation assoc) { 089 return this.dataObjectService.save(assoc, PersistenceOption.FLUSH); 090 } 091 092 /** 093 * {@inheritDoc} 094 */ 095 @Override 096 public EDocLiteDefinition getEDocLiteDefinition(final String defName) { 097 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create(); 098 criteria.setPredicates(equal(NAME_CRITERIA, defName), equal(ACTIVE_IND_CRITERIA, Boolean.TRUE)); 099 List<EDocLiteDefinition> edls = this.dataObjectService.findMatching(EDocLiteDefinition.class, 100 criteria.build()).getResults(); 101 if (null != edls && !edls.isEmpty()) { 102 return edls.get(0); 103 } else { 104 return null; 105 } 106 } 107 108 /** 109 * {@inheritDoc} 110 */ 111 @Override 112 public EDocLiteAssociation getEDocLiteAssociation(final String docTypeName) { 113 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create(); 114 criteria.setPredicates(equal(EDL_NAME, docTypeName), equal(ACTIVE_IND_CRITERIA, Boolean.TRUE)); 115 List<EDocLiteAssociation> edls = this.dataObjectService.findMatching(EDocLiteAssociation.class, 116 criteria.build()).getResults(); 117 118 if (null != edls && !edls.isEmpty()) { 119 return edls.get(0); 120 } else { 121 return null; 122 } 123 } 124 125 /** 126 * {@inheritDoc} 127 */ 128 @Override 129 public List<String> getEDocLiteDefinitions() { 130 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create(); 131 criteria.setPredicates(equal(ACTIVE_IND_CRITERIA, Boolean.TRUE)); 132 List<EDocLiteDefinition> defs = this.dataObjectService.findMatching(EDocLiteDefinition.class, 133 criteria.build()).getResults(); 134 ArrayList<String> names = new ArrayList<String>(defs.size()); 135 if (!defs.isEmpty()) { 136 for (EDocLiteDefinition def : defs) { 137 names.add(def.getName()); 138 } 139 } 140 141 return names; 142 } 143 144 /** 145 * {@inheritDoc} 146 */ 147 @Override 148 public List<EDocLiteAssociation> getEDocLiteAssociations() { 149 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create(); 150 criteria.setPredicates(equal(ACTIVE_IND_CRITERIA, Boolean.TRUE)); 151 return this.dataObjectService.findMatching(EDocLiteAssociation.class, criteria.build()).getResults(); 152 } 153 154 /** 155 * {@inheritDoc} 156 */ 157 @Override 158 public List<EDocLiteAssociation> search(final EDocLiteAssociation edocLite) { 159 List<Predicate> predicates = new ArrayList<Predicate>(); 160 if (edocLite.getActiveInd() != null) { 161 predicates.add(equal(ACTIVE_IND_CRITERIA, edocLite.getActiveInd())); 162 } 163 if (edocLite.getDefinition() != null) { 164 predicates.add(like(UPPER + "(" + DEFINITION + ")", "%" + edocLite.getDefinition().toUpperCase() + "%")); 165 } 166 if (edocLite.getEdlName() != null) { 167 predicates.add(like(UPPER + "(" + EDL_NAME + ")", "%" + edocLite.getEdlName().toUpperCase() + "%")); 168 } 169 if (edocLite.getStyle() != null) { 170 predicates.add(like(UPPER + "(" + STYLE + ")", "%" + edocLite.getStyle().toUpperCase() + "%")); 171 } 172 QueryByCriteria.Builder builder = QueryByCriteria.Builder.create(); 173 builder.setPredicates(predicates.toArray(new Predicate[predicates.size()])); 174 return this.dataObjectService.findMatching(EDocLiteAssociation.class, builder.build()).getResults(); 175 176 } 177 178 /** 179 * {@inheritDoc} 180 */ 181 @Override 182 public EDocLiteAssociation getEDocLiteAssociation(final Long associationId) { 183 return dataObjectService.find(EDocLiteAssociation.class, associationId); 184 } 185}