1 package net.javacoding.jspider.core.storage.jdbc; 2 3 import net.javacoding.jspider.core.model.SiteInternal; 4 import net.javacoding.jspider.core.storage.spi.SiteDAOSPI; 5 import net.javacoding.jspider.core.storage.spi.StorageSPI; 6 import net.javacoding.jspider.core.logging.LogFactory; 7 import net.javacoding.jspider.core.logging.Log; 8 9 import java.net.MalformedURLException ; 10 import java.net.URL ; 11 import java.sql.*; 12 import java.util.ArrayList ; 13 14 17 class SiteDAOImpl implements SiteDAOSPI { 18 19 public static final String ATTRIBUTE_ID = "id"; 20 public static final String ATTRIBUTE_HOST = "host"; 21 public static final String ATTRIBUTE_PORT = "port"; 22 public static final String ATTRIBUTE_STATE = "state"; 23 public static final String ATTRIBUTE_OBEYROBOTSTXT = "obeyrobotstxt"; 24 public static final String ATTRIBUTE_USEPROXY = "useproxy"; 25 public static final String ATTRIBUTE_USECOOKIES = "usecookies"; 26 public static final String ATTRIBUTE_HASROBOTSTXT = "hasrobotstxt"; 27 public static final String ATTRIBUTE_USERAGENT = "useragent"; 28 public static final String ATTRIBUTE_BASESITE = "basesite"; 29 public static final String ATTRIBUTE_HANDLE = "handle"; 30 31 protected DBUtil dbUtil; 32 protected StorageSPI storage; 33 protected Log log; 34 35 public SiteDAOImpl(StorageSPI storage, DBUtil dbUtil) { 36 this.storage = storage; 37 this.dbUtil = dbUtil; 38 this.log = LogFactory.getLog(SiteDAOImpl.class); 39 } 40 41 public SiteInternal find(URL siteURL) { 42 SiteInternal site = null; 43 Statement st = null; 44 ResultSet rs = null; 45 try { 46 Connection c = dbUtil.getConnection(); 47 st = c.createStatement(); 48 rs = st.executeQuery("select * from jspider_site where host = '" + siteURL.getHost() + "' and port = " + siteURL.getPort()); 49 if (rs.next()) { 50 site = createSiteFromRecord(rs); 51 } else { 52 return null; 53 } 54 } catch (SQLException e) { 55 log.error("SQLException", e); 56 } finally { 57 dbUtil.safeClose(rs, log); 58 dbUtil.safeClose(st, log); 59 } 60 return site; 61 } 62 63 public SiteInternal find(int id) { 64 SiteInternal site = null; 65 Statement st = null; 66 ResultSet rs = null; 67 try { 68 Connection c = dbUtil.getConnection(); 69 st = c.createStatement(); 70 rs = st.executeQuery("select * from jspider_site id=" + id); 71 if (rs.next()) { 72 site = createSiteFromRecord(rs); 73 } else { 74 return null; 75 } 76 } catch (SQLException e) { 77 log.error("SQLException", e); 78 } finally { 79 dbUtil.safeClose(rs, log); 80 dbUtil.safeClose(st, log); 81 } 82 return site; 83 } 84 85 public void create(int id, SiteInternal site) { 86 Connection connection = dbUtil.getConnection(); 87 Statement st = null; 88 StringBuffer sb = new StringBuffer (); 89 sb.append("insert into jspider_site ("); 90 sb.append("id,"); 91 sb.append("host,"); 92 sb.append("port,"); 93 sb.append("handle,"); 94 sb.append("robotstxthandled,"); 95 sb.append("usecookies,"); 96 sb.append("useproxy,"); 97 sb.append("state,"); 98 sb.append("obeyrobotstxt,"); 99 sb.append("basesite,"); 100 sb.append("useragent"); 101 sb.append(") values ("); 102 sb.append(DBUtil.format(id)); 103 sb.append(","); 104 sb.append(DBUtil.format(site.getHost())); 105 sb.append(","); 106 sb.append(DBUtil.format(site.getPort())); 107 sb.append(","); 108 sb.append(DBUtil.format(site.mustHandle())); 109 sb.append(","); 110 sb.append(DBUtil.format(site.isRobotsTXTHandled())); 111 sb.append(","); 112 sb.append(DBUtil.format(site.getUseCookies())); 113 sb.append(","); 114 sb.append(DBUtil.format(site.getUseProxy())); 115 sb.append(","); 116 sb.append(DBUtil.format(site.getState())); 117 sb.append(","); 118 sb.append(DBUtil.format(site.getObeyRobotsTXT())); 119 sb.append(","); 120 sb.append(DBUtil.format(site.isBaseSite())); 121 sb.append(","); 122 sb.append(DBUtil.format(site.getUserAgent())); 123 sb.append(")"); 124 try { 125 st = connection.createStatement(); 126 st.executeUpdate(sb.toString()); 127 } catch (SQLException e) { 128 log.error("SQLException", e); 129 } finally { 130 dbUtil.safeClose(st, log); 131 } 132 } 133 134 public void save(int id, SiteInternal site) { 135 StringBuffer sb = new StringBuffer (); 136 Connection connection = dbUtil.getConnection(); 137 Statement st = null; 138 sb.append("update jspider_site set "); 139 sb.append("handle="); 140 sb.append(DBUtil.format(site.mustHandle())); 141 sb.append(",robotstxthandled="); 142 sb.append(DBUtil.format(site.isRobotsTXTHandled())); 143 sb.append(",usecookies="); 144 sb.append(DBUtil.format(site.getUseCookies())); 145 sb.append(",useproxy="); 146 sb.append(DBUtil.format(site.getUseProxy())); 147 sb.append(",state="); 148 sb.append(DBUtil.format(site.getState())); 149 sb.append(",obeyrobotstxt="); 150 sb.append(DBUtil.format(site.getObeyRobotsTXT())); 151 sb.append(",basesite="); 152 sb.append(DBUtil.format(site.isBaseSite())); 153 sb.append(",useragent="); 154 sb.append(DBUtil.format(site.getUserAgent())); 155 sb.append(" where id = "); 156 sb.append(DBUtil.format(id)); 157 try { 158 st = connection.createStatement(); 159 st.executeUpdate(sb.toString()); 160 } catch (SQLException e) { 161 log.error("SQLException", e); 162 } finally { 163 dbUtil.safeClose(st, log); 164 } 165 } 166 167 public SiteInternal[] findAll() { 168 ArrayList al = new ArrayList (); 169 Statement st = null; 170 ResultSet rs = null; 171 try { 172 Connection c = dbUtil.getConnection(); 173 st = c.createStatement(); 174 rs = st.executeQuery("select * from jspider_site"); 175 while (rs.next()) { 176 al.add(createSiteFromRecord(rs)); 177 } 178 } catch (SQLException e) { 179 log.error("SQLException", e); 180 } finally { 181 dbUtil.safeClose(rs, log); 182 dbUtil.safeClose(st, log); 183 } 184 return (SiteInternal[]) al.toArray(new SiteInternal[al.size()]); 185 } 186 187 188 protected SiteInternal createSiteFromRecord(ResultSet rs) throws SQLException { 189 String host = rs.getString(ATTRIBUTE_HOST); 190 int id = rs.getInt(ATTRIBUTE_ID); 191 int port = rs.getInt(ATTRIBUTE_PORT); 192 int state = rs.getInt(ATTRIBUTE_STATE); 193 boolean obeyRobotsTXT = rs.getInt(ATTRIBUTE_OBEYROBOTSTXT) != 0; 194 boolean useProxy = rs.getInt(ATTRIBUTE_USEPROXY) != 0; 195 boolean useCookies = rs.getInt(ATTRIBUTE_USECOOKIES) != 0; 196 String userAgent = rs.getString(ATTRIBUTE_USERAGENT); 197 boolean baseSite = rs.getInt(ATTRIBUTE_BASESITE) != 0; 198 boolean handle = rs.getInt(ATTRIBUTE_HANDLE) != 0; 199 200 URL url = null; 201 try { 202 url = new URL ("http", host, port, ""); 203 } catch (MalformedURLException e) { 204 e.printStackTrace(); 205 } 206 207 return new SiteInternal(storage, id, handle, url, state, obeyRobotsTXT, useProxy, useCookies, userAgent, baseSite); 208 } 209 210 } 211 | Popular Tags |