/* * Created on Aug 26, 2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package net.reliableresponse.notification.broker.impl.oracle; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import net.reliableresponse.notification.broker.BrokerFactory; import net.reliableresponse.notification.broker.impl.sql.GenericSQLGroupMgmtBroker; import net.reliableresponse.notification.usermgmt.BroadcastGroup; import net.reliableresponse.notification.usermgmt.EscalationGroup; import net.reliableresponse.notification.usermgmt.Group; import net.reliableresponse.notification.usermgmt.OnCallGroup; /** * @author drig * * Copyright 2004 - David Rudder */ public class OracleGroupMgmtBroker extends GenericSQLGroupMgmtBroker { /* (non-Javadoc) * @see net.reliableresponse.notification.broker.impl.sql.GenericSQLGroupMgmtBroker#getConnection() */ public Connection getConnection() { return BrokerFactory.getDatabaseBroker().getConnection(); } /* * (non-Javadoc) * * @see net.reliableresponse.notification.broker.GroupMgmtBroker#getGroups(int, * int, net.reliableresponse.notification.usermgmt.Group[]) */ public int getGroups(int pageSize, int pageNum, Group[] groups) { int count = 0; if (groups.length < pageSize) { pageSize = groups.length; } String sql = "SELECT m.uuid, g.membertype, m.firstname, m.description, m.loopcount, m.email FROM member m, membergroup g WHERE m.deleted='N' AND m.uuid=g.uuid AND m.type='2' AND ROWNUM>=? AND ROWNUM<=? ORDER BY firstname"; PreparedStatement stmt = null; Connection connection = getConnection(); ResultSet rs = null; try { stmt = connection.prepareStatement(sql); stmt.setInt(1, pageNum * pageSize); stmt.setInt(2, (pageNum+1) * pageSize); rs = stmt.executeQuery(); while (rs.next()) { String uuid = rs.getString(1); int type = rs.getInt(2); String groupName = rs.getString(3); String desc = rs.getString(4); String email = rs.getString(6); Group group = null; switch (type) { case Group.ESCALATION: group = new EscalationGroup(); group.setGroupName(groupName); break; case Group.BROADCAST: group = new BroadcastGroup(); group.setGroupName(groupName); break; case Group.ONCALL: group = new OnCallGroup(); group.setGroupName(groupName); break; default: BrokerFactory.getLoggingBroker().logWarn( "Trying to load unknown group type " + type); } if (group != null) { group.setDescription(desc); group.setEmailAddress(email); group.setUuid(uuid); group.setAutocommit(true); } groups[count] = group; count++; } } catch (SQLException e) { BrokerFactory.getLoggingBroker().logError(e); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (connection != null) connection.close(); } catch (SQLException e1) { BrokerFactory.getLoggingBroker().logError(e1); } } return count; } public int getGroupsLike(int pageSize, int pageNum, String substring, Group[] groups) { int count = 0; if (groups.length < pageSize) { pageSize = groups.length; } String sql = "SELECT m.uuid FROM member m, membergroup g WHERE m.deleted='N' AND m.uuid=g.uuid AND m.type='2' AND lower(m.firstname) like ? AND ROWNUM>=? AND ROWNUM<=? ORDER BY firstname"; PreparedStatement stmt = null; Connection connection = getConnection(); ResultSet rs = null; try { stmt = connection.prepareStatement(sql); stmt.setString(1, "%" + substring.toLowerCase() + "%"); stmt.setInt(2, pageNum * pageSize); stmt.setInt(3, (pageNum+1) * pageSize); rs = stmt.executeQuery(); while (rs.next()) { String uuid = rs.getString(1); groups[count] = getGroupGeneric( "SELECT m.uuid, g.membertype, m.firstname, m.description FROM member m, membergroup g WHERE m.deleted='N' AND m.type='2' AND m.uuid=?", uuid); count++; } } catch (SQLException e) { BrokerFactory.getLoggingBroker().logError(e); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (connection != null) connection.close(); } catch (SQLException e1) { BrokerFactory.getLoggingBroker().logError(e1); } } return count; } public int getGroupsUuidsLike(int pageSize, int pageNum, String substring, String[] uuids) { int count = 0; if (uuids.length < pageSize) { pageSize = uuids.length; } String sql = "SELECT m.uuid FROM member m, membergroup g WHERE m.deleted='N' AND m.uuid=g.uuid AND m.type='2' AND lower(m.firstname) like ? AND ROWNUM>=? AND ROWNUM<=? ORDER BY m.firstname"; PreparedStatement stmt = null; Connection connection = getConnection(); ResultSet rs = null; try { stmt = connection.prepareStatement(sql); stmt.setString(1, "%" + substring.toLowerCase() + "%"); stmt.setInt(2, pageNum * pageSize); stmt.setInt(3, (pageNum+1) * pageSize); rs = stmt.executeQuery(); while (rs.next()) { uuids[count] = rs.getString(1); count++; } } catch (SQLException e) { BrokerFactory.getLoggingBroker().logError(e); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (connection != null) connection.close(); } catch (SQLException e1) { BrokerFactory.getLoggingBroker().logError(e1); } } return count; } public int getGroupUuids(int pageSize, int pageNum, String[] uuids) { int count = 0; if (uuids.length < pageSize) { pageSize = uuids.length; } String sql = "SELECT uuid FROM member WHERE deleted='N' AND type='2' AND ROWNUM>=? AND ROWNUM<=? ORDER BY firstname "; PreparedStatement stmt = null; Connection connection = getConnection(); ResultSet rs = null; try { stmt = connection.prepareStatement(sql); stmt.setInt(1, pageNum * pageSize); stmt.setInt(2, (pageNum+1) * pageSize); rs = stmt.executeQuery(); while (rs.next()) { uuids[count] = rs.getString(1); count++; } } catch (SQLException e) { BrokerFactory.getLoggingBroker().logError(e); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (connection != null) connection.close(); } catch (SQLException e1) { BrokerFactory.getLoggingBroker().logError(e1); } } return count; } }