001: package net.javacoding.jspider.core.storage.jdbc;
002:
003: import net.javacoding.jspider.core.storage.EMailAddressDAO;
004: import net.javacoding.jspider.core.storage.spi.EMailAddressDAOSPI;
005: import net.javacoding.jspider.core.storage.spi.StorageSPI;
006: import net.javacoding.jspider.core.model.*;
007: import net.javacoding.jspider.core.logging.Log;
008: import net.javacoding.jspider.core.logging.LogFactory;
009:
010: import java.sql.*;
011: import java.util.ArrayList;
012:
013: /**
014: * $Id: EMailAddressDAOImpl.java,v 1.2 2003/04/11 16:37:06 vanrogu Exp $
015: */
016: class EMailAddressDAOImpl implements EMailAddressDAOSPI {
017:
018: protected Log log;
019: protected StorageSPI storage;
020: protected DBUtil dbUtil;
021:
022: public EMailAddressDAOImpl(StorageSPI storage, DBUtil dbUtil) {
023: this .log = LogFactory.getLog(EMailAddressDAO.class);
024: this .storage = storage;
025: this .dbUtil = dbUtil;
026: }
027:
028: public void register(ResourceInternal resource,
029: EMailAddressInternal address) {
030: Connection connection = dbUtil.getConnection();
031:
032: Statement st = null;
033: ResultSet rs = null;
034:
035: try {
036: st = connection.createStatement();
037: rs = st
038: .executeQuery("select count(*) as count from jspider_email_address where address='"
039: + address.getAddress() + "'");
040: rs.next();
041: int count = rs.getInt("count");
042: if (count == 0) {
043: st = connection.createStatement();
044: st
045: .executeUpdate("insert into jspider_email_address ( address ) values ( '"
046: + address.getAddress() + "' )");
047: st = connection.createStatement();
048: ResultSet rs2 = st
049: .executeQuery("select id from jspider_email_address where address = '"
050: + address.getAddress() + "'");
051: rs2.next();
052: address.setId(rs2.getInt("id"));
053: }
054:
055: rs = st
056: .executeQuery("select count(*) as count from jspider_email_address, jspider_email_address_reference where jspider_email_address_reference.resource="
057: + resource.getId()
058: + " and jspider_email_address_reference.address = jspider_email_address.id and jspider_email_address.id = "
059: + address.getId());
060: rs.next();
061: st = connection.createStatement();
062: if (rs.getInt("count") == 0) {
063: st
064: .executeUpdate("insert into jspider_email_address_reference ( resource, address, count ) values ( "
065: + resource.getId()
066: + ","
067: + address.getId() + ", 1 )");
068: } else {
069: st
070: .executeUpdate("update jspider_email_address_reference set count = count + 1 where address = "
071: + address.getId()
072: + " and resource = "
073: + resource.getId());
074: }
075: } catch (SQLException e) {
076: log.error("SQLException", e);
077: } finally {
078: dbUtil.safeClose(rs, log);
079: dbUtil.safeClose(st, log);
080: }
081: }
082:
083: public EMailAddressInternal find(String address) {
084: Statement st = null;
085: ResultSet rs = null;
086: EMailAddressInternal emailAddress = null;
087: try {
088: Connection connection = dbUtil.getConnection();
089: st = connection.createStatement();
090: rs = st
091: .executeQuery("select * from jspider_email_address where address = '"
092: + address + "'");
093: while (rs.next()) {
094: emailAddress = createEMailAddressFromRecord(rs);
095: }
096: } catch (SQLException e) {
097: log.error("SQLException", e);
098: } finally {
099: dbUtil.safeClose(rs, log);
100: dbUtil.safeClose(st, log);
101: }
102: return emailAddress;
103: }
104:
105: public EMailAddressInternal[] findByResource(
106: ResourceInternal resource) {
107: ArrayList al = new ArrayList();
108: Statement st = null;
109: ResultSet rs = null;
110: try {
111: Connection connection = dbUtil.getConnection();
112: st = connection.createStatement();
113: rs = st
114: .executeQuery("select address.id, address.address from jspider_email_address address, jspider_email_address_reference ref where ref.address=address.id and ref.resource="
115: + resource.getId());
116: while (rs.next()) {
117: al.add(createEMailAddressFromRecord(rs));
118: }
119: } catch (SQLException e) {
120: log.error("SQLException", e);
121: } finally {
122: dbUtil.safeClose(rs, log);
123: dbUtil.safeClose(st, log);
124: }
125: return (EMailAddressInternal[]) al
126: .toArray(new EMailAddressInternal[al.size()]);
127: }
128:
129: public EMailAddressReferenceInternal[] findReferencesByResource(
130: ResourceInternal resource) {
131: ArrayList al = new ArrayList();
132: Statement st = null;
133: ResultSet rs = null;
134: try {
135: Connection connection = dbUtil.getConnection();
136: st = connection.createStatement();
137: rs = st
138: .executeQuery("select jspider_email_address.address, jspider_email_address_reference.resource, jspider_email_address_reference.count from jspider_email_address, jspider_email_address_reference where jspider_email_address_reference.resource="
139: + resource.getId()
140: + " and jspider_email_address_reference.address = jspider_email_address.id");
141: while (rs.next()) {
142: al.add(createEMailAddressReferenceFromRecord(rs));
143: }
144: } catch (SQLException e) {
145: log.error("SQLException", e);
146: } finally {
147: dbUtil.safeClose(rs, log);
148: dbUtil.safeClose(st, log);
149: }
150: return (EMailAddressReferenceInternal[]) al
151: .toArray(new EMailAddressReferenceInternal[al.size()]);
152: }
153:
154: protected EMailAddressInternal createEMailAddressFromRecord(
155: ResultSet rs) throws SQLException {
156: int id = rs.getInt("id");
157: String address = rs.getString("address");
158: return new EMailAddressInternal(id, address);
159: }
160:
161: protected EMailAddressReferenceInternal createEMailAddressReferenceFromRecord(
162: ResultSet rs) throws SQLException {
163: int resource = rs.getInt("resource");
164: String address = rs.getString("address");
165: int count = rs.getInt("count");
166: return new EMailAddressReferenceInternal(storage, resource,
167: address, count);
168: }
169:
170: }
|