]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/dbObjects/Domain.java
ADD: A step towards a more friendly SQL API.
[gigi.git] / src / org / cacert / gigi / dbObjects / Domain.java
index 8d70c56cce82a7c7a065b179bd58392ef28eafac..13c8436cdd8fd63919d89a947b6b39cda65fb896 100644 (file)
@@ -1,14 +1,13 @@
 package org.cacert.gigi.dbObjects;
 
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
 import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.database.DatabaseConnection;
+import org.cacert.gigi.database.GigiPreparedStatement;
+import org.cacert.gigi.database.GigiResultSet;
 import org.cacert.gigi.dbObjects.DomainPingConfiguration.PingType;
 
 public class Domain implements IdCachable {
@@ -25,7 +24,7 @@ public class Domain implements IdCachable {
 
         private DomainPingConfiguration config;
 
-        public DomainPingExecution(ResultSet rs) throws SQLException {
+        public DomainPingExecution(GigiResultSet rs) {
             state = rs.getString(1);
             type = rs.getString(2);
             info = rs.getString(3);
@@ -61,11 +60,11 @@ public class Domain implements IdCachable {
 
     private int id;
 
-    private Domain(int id) throws SQLException {
-        PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, domain FROM `domains` WHERE id=? AND deleted IS NULL");
+    private Domain(int id) {
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, domain FROM `domains` WHERE id=? AND deleted IS NULL");
         ps.setInt(1, id);
 
-        ResultSet rs = ps.executeQuery();
+        GigiResultSet rs = ps.executeQuery();
         if ( !rs.next()) {
             throw new IllegalArgumentException("Invalid domain id " + id);
         }
@@ -82,19 +81,15 @@ public class Domain implements IdCachable {
     }
 
     private static void checkInsert(String suffix) throws GigiApiException {
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `domains` WHERE (domain=RIGHT(?,LENGTH(domain))  OR RIGHT(domain,LENGTH(?))=?) AND deleted IS NULL");
-            ps.setString(1, suffix);
-            ps.setString(2, suffix);
-            ps.setString(3, suffix);
-            ResultSet rs = ps.executeQuery();
-            boolean existed = rs.next();
-            rs.close();
-            if (existed) {
-                throw new GigiApiException("Domain could not be inserted. Domain is already valid.");
-            }
-        } catch (SQLException e) {
-            throw new GigiApiException(e);
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `domains` WHERE (domain=RIGHT(?,LENGTH(domain))  OR RIGHT(domain,LENGTH(?))=?) AND deleted IS NULL");
+        ps.setString(1, suffix);
+        ps.setString(2, suffix);
+        ps.setString(3, suffix);
+        GigiResultSet rs = ps.executeQuery();
+        boolean existed = rs.next();
+        rs.close();
+        if (existed) {
+            throw new GigiApiException("Domain could not be inserted. Domain is already valid.");
         }
     }
 
@@ -104,16 +99,12 @@ public class Domain implements IdCachable {
         }
         synchronized (Domain.class) {
             checkInsert(suffix);
-            try {
-                PreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `domains` SET memid=?, domain=?");
-                ps.setInt(1, owner.getId());
-                ps.setString(2, suffix);
-                ps.execute();
-                id = DatabaseConnection.lastInsertId(ps);
-                myCache.put(this);
-            } catch (SQLException e) {
-                throw new GigiApiException(e);
-            }
+            GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `domains` SET memid=?, domain=?");
+            ps.setInt(1, owner.getId());
+            ps.setString(2, suffix);
+            ps.execute();
+            id = ps.lastInsertId();
+            myCache.put(this);
         }
     }
 
@@ -121,13 +112,9 @@ public class Domain implements IdCachable {
         if (id == 0) {
             throw new GigiApiException("not inserted.");
         }
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domains` SET deleted=CURRENT_TIMESTAMP WHERE id=?");
-            ps.setInt(1, id);
-            ps.execute();
-        } catch (SQLException e) {
-            throw new GigiApiException(e);
-        }
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `domains` SET deleted=CURRENT_TIMESTAMP WHERE id=?");
+        ps.setInt(1, id);
+        ps.execute();
     }
 
     public User getOwner() {
@@ -148,75 +135,54 @@ public class Domain implements IdCachable {
     public List<DomainPingConfiguration> getConfiguredPings() throws GigiApiException {
         LinkedList<DomainPingConfiguration> configs = this.configs;
         if (configs == null) {
-            try {
-                configs = new LinkedList<>();
-                PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT id FROM pingconfig WHERE domainid=?");
-                ps.setInt(1, id);
-                ResultSet rs = ps.executeQuery();
-                while (rs.next()) {
-                    configs.add(DomainPingConfiguration.getById(rs.getInt(1)));
-                }
-                rs.close();
-                this.configs = configs;
-            } catch (SQLException e) {
-                throw new GigiApiException(e);
+            configs = new LinkedList<>();
+            GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT id FROM pingconfig WHERE domainid=?");
+            ps.setInt(1, id);
+            GigiResultSet rs = ps.executeQuery();
+            while (rs.next()) {
+                configs.add(DomainPingConfiguration.getById(rs.getInt(1)));
             }
+            rs.close();
+            this.configs = configs;
 
         }
         return Collections.unmodifiableList(configs);
     }
 
     public void addPing(PingType type, String config) throws GigiApiException {
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO pingconfig SET domainid=?, type=?, info=?");
-            ps.setInt(1, id);
-            ps.setString(2, type.toString().toLowerCase());
-            ps.setString(3, config);
-            ps.execute();
-            configs = null;
-        } catch (SQLException e) {
-            throw new GigiApiException(e);
-        }
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO pingconfig SET domainid=?, type=?, info=?");
+        ps.setInt(1, id);
+        ps.setString(2, type.toString().toLowerCase());
+        ps.setString(3, config);
+        ps.execute();
+        configs = null;
     }
 
     public void verify(String hash) throws GigiApiException {
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE domainPinglog SET state='success' WHERE challenge=? AND configId IN (SELECT id FROM pingconfig WHERE domainId=?)");
-            ps.setString(1, hash);
-            ps.setInt(2, id);
-            ps.executeUpdate();
-        } catch (SQLException e) {
-            throw new GigiApiException(e);
-        }
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE domainPinglog SET state='success' WHERE challenge=? AND configId IN (SELECT id FROM pingconfig WHERE domainId=?)");
+        ps.setString(1, hash);
+        ps.setInt(2, id);
+        ps.executeUpdate();
     }
 
     public boolean isVerified() {
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM domainPinglog INNER JOIN pingconfig ON pingconfig.id=domainPinglog.configId WHERE domainid=? AND state='success'");
-            ps.setInt(1, id);
-            ResultSet rs = ps.executeQuery();
-            return rs.next();
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
-        return false;
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM domainPinglog INNER JOIN pingconfig ON pingconfig.id=domainPinglog.configId WHERE domainid=? AND state='success'");
+        ps.setInt(1, id);
+        GigiResultSet rs = ps.executeQuery();
+        return rs.next();
     }
 
     public DomainPingExecution[] getPings() throws GigiApiException {
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT state, type, info, result, configId FROM domainPinglog INNER JOIN pingconfig ON pingconfig.id=domainPinglog.configid WHERE pingconfig.domainid=? ORDER BY `when` DESC;");
-            ps.setInt(1, id);
-            ResultSet rs = ps.executeQuery();
-            rs.last();
-            DomainPingExecution[] contents = new DomainPingExecution[rs.getRow()];
-            rs.beforeFirst();
-            for (int i = 0; i < contents.length && rs.next(); i++) {
-                contents[i] = new DomainPingExecution(rs);
-            }
-            return contents;
-        } catch (SQLException e) {
-            throw new GigiApiException(e);
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT state, type, info, result, configId FROM domainPinglog INNER JOIN pingconfig ON pingconfig.id=domainPinglog.configid WHERE pingconfig.domainid=? ORDER BY `when` DESC;");
+        ps.setInt(1, id);
+        GigiResultSet rs = ps.executeQuery();
+        rs.last();
+        DomainPingExecution[] contents = new DomainPingExecution[rs.getRow()];
+        rs.beforeFirst();
+        for (int i = 0; i < contents.length && rs.next(); i++) {
+            contents[i] = new DomainPingExecution(rs);
         }
+        return contents;
 
     }
 
@@ -225,11 +191,7 @@ public class Domain implements IdCachable {
     public static synchronized Domain getById(int id) throws IllegalArgumentException {
         Domain em = myCache.get(id);
         if (em == null) {
-            try {
-                myCache.put(em = new Domain(id));
-            } catch (SQLException e1) {
-                throw new IllegalArgumentException(e1);
-            }
+            myCache.put(em = new Domain(id));
         }
         return em;
     }