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.kim.service.dao.impl; 017 018 import org.kuali.rice.core.api.membership.MemberType; 019 import org.kuali.rice.kew.api.KewApiConstants; 020 import org.kuali.rice.kim.api.KimConstants; 021 import org.kuali.rice.kim.api.group.Group; 022 import org.kuali.rice.kim.api.identity.name.EntityName; 023 import org.kuali.rice.krad.util.KRADConstants; 024 import org.springframework.dao.DataAccessException; 025 import org.springframework.jdbc.core.JdbcTemplate; 026 import org.springframework.jdbc.core.PreparedStatementCallback; 027 import org.springframework.jdbc.core.PreparedStatementCreator; 028 import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; 029 import org.kuali.rice.kim.service.dao.UiDocumentServiceDAO; 030 031 import javax.sql.DataSource; 032 import java.sql.Connection; 033 import java.sql.PreparedStatement; 034 import java.sql.ResultSet; 035 import java.sql.SQLException; 036 import java.util.HashMap; 037 import java.util.Map; 038 039 /** 040 * Spring JdbcTemplate implementation of UiDocumentServiceDAO 041 * 042 * @author Kuali Rice Team (rice.collab@kuali.org) 043 * 044 */ 045 public class UiDocumentServiceDAOJdbcImpl implements UiDocumentServiceDAO { 046 047 public static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(UiDocumentServiceDAOJdbcImpl.class); 048 049 private DataSource dataSource; 050 051 public void setDataSource(DataSource dataSource) { 052 this.dataSource = new TransactionAwareDataSourceProxy(dataSource); 053 } 054 055 @Override 056 public Map<String, Group> findGroupsForRole(final String roleId) { 057 final Map<String, Group> roleGroupMembers = new HashMap<String, Group>(); 058 059 JdbcTemplate template = new JdbcTemplate(dataSource); 060 Map<String, Group> results = template.execute(new PreparedStatementCreator() { 061 062 public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { 063 064 String sql = " SELECT GRP_ID, GRP_NM, NMSPC_CD, KIM_TYP_ID, ACTV_IND" + 065 " FROM KRIM_GRP_T G, KRIM_ROLE_MBR_T RM WHERE" + 066 " G.GRP_ID = RM.MBR_ID AND GRP_ID IN" + 067 " (SELECT MBR_ID FROM KRIM_ROLE_MBR_T WHERE MBR_TYP_CD = '" + 068 MemberType.GROUP.getCode() + "' AND ROLE_ID = '" + roleId + "')"; 069 070 LOG.debug("Query to find Entity Names for role " + roleId + ":" + sql); 071 072 PreparedStatement statement = connection.prepareStatement(sql); 073 return statement; 074 } 075 }, new PreparedStatementCallback<Map<String,Group>>() { 076 public Map<String,Group> doInPreparedStatement( 077 PreparedStatement statement) throws SQLException, DataAccessException { 078 ResultSet rs = statement.executeQuery(); 079 try { 080 while (rs.next()) { 081 082 String groupId = rs.getString(1); 083 String groupName = rs.getString(2); 084 String groupNameSpace = rs.getString(3); 085 String kimTypeId = rs.getString(4); 086 String activeInd = rs.getString(5); 087 Group.Builder builder = Group.Builder.create(groupNameSpace, groupName, kimTypeId); 088 builder.setId(groupId); 089 builder.build(); 090 if (activeInd.equalsIgnoreCase(KewApiConstants.ACTIVE_CD)) { 091 builder.setActive(true); 092 } 093 roleGroupMembers.put(groupId, builder.build()); 094 } 095 } finally { 096 if (rs != null) { 097 rs.close(); 098 } 099 } 100 return roleGroupMembers; 101 } 102 } 103 ); 104 return roleGroupMembers; 105 } 106 107 @Override 108 public Map<String, EntityName> findEntityNamesForRole(final String roleId) { 109 final Map<String, EntityName> entityNamesForPrincipals = new HashMap<String, EntityName>(); 110 111 JdbcTemplate template = new JdbcTemplate(dataSource); 112 Map<String, EntityName> results = template.execute(new PreparedStatementCreator() { 113 public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { 114 115 String sql = "SELECT EN.ENTITY_NM_ID, EN.ENTITY_ID, EN.FIRST_NM, EN.LAST_NM, EP.SUPPRESS_NM_IND FROM" + 116 " KRIM_PRNCPL_T KP, KRIM_ENTITY_NM_T EN LEFT JOIN KRIM_ENTITY_PRIV_PREF_T EP" + 117 " ON EN.ENTITY_ID = EP.ENTITY_ID" + 118 " WHERE EN.ACTV_IND='" + KewApiConstants.ACTIVE_CD + 119 "' AND EN.DFLT_IND='"+ KewApiConstants.ACTIVE_CD + 120 "' AND EN.NM_TYP_CD='"+ KimConstants.NameTypes.PREFERRED + 121 "' AND EN.ENTITY_ID = KP.ENTITY_ID " + 122 " AND KP.PRNCPL_ID IN (SELECT MBR_ID FROM KRIM_ROLE_MBR_T WHERE ROLE_ID = '" + roleId + "')"; 123 LOG.debug("Query to find Entity Names for role " + roleId + ":" + sql); 124 125 PreparedStatement statement = connection.prepareStatement(sql); 126 return statement; 127 } 128 }, new PreparedStatementCallback<Map<String,EntityName>>() { 129 public Map<String,EntityName> doInPreparedStatement( 130 PreparedStatement statement) throws SQLException, DataAccessException { 131 ResultSet rs = statement.executeQuery(); 132 try { 133 while (rs.next()) { 134 String id = rs.getString(1); 135 String entityId = rs.getString(2); 136 String firstName = rs.getString(3); 137 String lastName = rs.getString(4); 138 String suppressName = rs.getString(5); 139 boolean suppressNameBoolean = false; 140 if (KRADConstants.YES_INDICATOR_VALUE.equalsIgnoreCase(suppressName)) { 141 suppressNameBoolean = true; 142 } 143 EntityName.Builder builder = EntityName.Builder.create(id, entityId, firstName, lastName, suppressNameBoolean); 144 builder.setActive(true); 145 builder.setDefaultValue(true); 146 EntityName entityName = builder.build(); 147 entityNamesForPrincipals.put(entityName.getEntityId(), entityName); 148 } 149 } finally { 150 if (rs != null) { 151 rs.close(); 152 } 153 } 154 return entityNamesForPrincipals; 155 } 156 } 157 ); 158 return entityNamesForPrincipals; 159 } 160 }