01: /* Copyright 2001-2002 The JA-SIG Collaborative. All rights reserved.
02: * See license distributed with this file and
03: * available online at http://www.uportal.org/license.html
04: */
05:
06: package org.jasig.portal.groups.local.searchers;
07:
08: import java.sql.Connection;
09: import java.sql.PreparedStatement;
10: import java.sql.ResultSet;
11: import java.util.ArrayList;
12:
13: import org.apache.commons.logging.Log;
14: import org.apache.commons.logging.LogFactory;
15: import org.jasig.portal.EntityIdentifier;
16: import org.jasig.portal.RDBMServices;
17: import org.jasig.portal.groups.GroupsException;
18: import org.jasig.portal.groups.local.ITypedEntitySearcher;
19:
20: /**
21: * Searches the portal DB for channels. Used by EntitySearcherImpl
22: *
23: * @author Alex Vigdor
24: * @version $Revision: 36810 $
25: */
26:
27: public class RDBMChannelDefSearcher implements ITypedEntitySearcher {
28: private static final Log log = LogFactory
29: .getLog(RDBMChannelDefSearcher.class);
30: private static final String is_search = "select CHAN_ID from UP_CHANNEL where (UPPER(CHAN_NAME)=UPPER(?) or UPPER(CHAN_TITLE)=UPPER(?))";
31: private static final String partial_search = "select CHAN_ID from UP_CHANNEL where (UPPER(CHAN_NAME) like UPPER(?) or UPPER(CHAN_TITLE) like UPPER(?))";
32: private Class chanDef;
33:
34: public RDBMChannelDefSearcher() {
35: chanDef = org.jasig.portal.ChannelDefinition.class;
36: }
37:
38: public EntityIdentifier[] searchForEntities(String query, int method)
39: throws GroupsException {
40: //System.out.println("searching for channel");
41: EntityIdentifier[] r = new EntityIdentifier[0];
42: ArrayList ar = new ArrayList();
43: Connection conn = null;
44: PreparedStatement ps = null;
45:
46: try {
47: conn = RDBMServices.getConnection();
48: switch (method) {
49: case IS:
50: ps = conn
51: .prepareStatement(RDBMChannelDefSearcher.is_search);
52: break;
53: case STARTS_WITH:
54: query = query + "%";
55: ps = conn
56: .prepareStatement(RDBMChannelDefSearcher.partial_search);
57: break;
58: case ENDS_WITH:
59: query = "%" + query;
60: ps = conn
61: .prepareStatement(RDBMChannelDefSearcher.partial_search);
62: break;
63: case CONTAINS:
64: query = "%" + query + "%";
65: ps = conn
66: .prepareStatement(RDBMChannelDefSearcher.partial_search);
67: break;
68: default:
69: throw new GroupsException("Unknown search type");
70: }
71: ps.clearParameters();
72: ps.setString(1, query);
73: ps.setString(2, query);
74: ResultSet rs = ps.executeQuery();
75: //System.out.println(ps.toString());
76: while (rs.next()) {
77: //System.out.println("result");
78: ar.add(new EntityIdentifier(rs.getString(1), chanDef));
79: }
80: ps.close();
81: } catch (Exception e) {
82: log.error("RDBMChannelDefSearcher.searchForEntities(): "
83: + ps, e);
84: } finally {
85: RDBMServices.releaseConnection(conn);
86: }
87: return (EntityIdentifier[]) ar.toArray(r);
88: }
89:
90: public Class getType() {
91: return chanDef;
92: }
93: }
|