]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/util/Job.java
[DB]: Add orgAdmin management code
[gigi.git] / src / org / cacert / gigi / util / Job.java
index 70c9d569714cd091788cbea36f9d8b8bcabd0c08..f5287717308ae736a33669663d1fd9bcfe5195d9 100644 (file)
@@ -1,55 +1,70 @@
 package org.cacert.gigi.util;
 
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.sql.Date;
 
-import org.cacert.gigi.Certificate;
+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.Certificate;
+import org.cacert.gigi.output.CertificateValiditySelector;
 
 public class Job {
-       int id;
-
-       private Job(int id) {
-               this.id = id;
-       }
-
-       public static enum JobType {
-               SIGN("sign"), REVOKE("revoke");
-               private final String name;
-
-               private JobType(String name) {
-                       this.name = name;
-               }
-
-               public String getName() {
-                       return name;
-               }
-       }
-
-       public static Job submit(Certificate targetId, JobType type) throws SQLException {
-               PreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `jobs` SET targetId=?, task=?");
-               ps.setInt(1, targetId.getId());
-               ps.setString(2, type.getName());
-               ps.execute();
-               return new Job(DatabaseConnection.lastInsertId(ps));
-       }
-
-       public boolean waitFor(int max) throws SQLException, InterruptedException {
-               long start = System.currentTimeMillis();
-               PreparedStatement ps = DatabaseConnection.getInstance().prepare(
-                       "SELECT 1 FROM `jobs` WHERE id=? AND state='open'");
-               ps.setInt(1, id);
-               ResultSet rs = ps.executeQuery();
-               while (rs.next()) {
-                       rs.close();
-                       if (max != 0 && System.currentTimeMillis() - start > max) {
-                               return false;
-                       }
-                       Thread.sleep((long) (2000 + Math.random() * 2000));
-                       rs = ps.executeQuery();
-               }
-               rs.close();
-               return true;
-       }
+
+    private int id;
+
+    private Job(int id) {
+        this.id = id;
+    }
+
+    public static enum JobType {
+        SIGN("sign"), REVOKE("revoke");
+
+        private final String name;
+
+        private JobType(String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    public static Job sign(Certificate targetId, Date start, String period) throws GigiApiException {
+        CertificateValiditySelector.checkValidityLength(period);
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `jobs` SET targetId=?, task=?, executeFrom=?, executeTo=?");
+        ps.setInt(1, targetId.getId());
+        ps.setString(2, JobType.SIGN.getName());
+        ps.setDate(3, start);
+        ps.setString(4, period);
+        ps.execute();
+        return new Job(ps.lastInsertId());
+    }
+
+    public static Job revoke(Certificate targetId) {
+
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `jobs` SET targetId=?, task=?");
+        ps.setInt(1, targetId.getId());
+        ps.setString(2, JobType.REVOKE.getName());
+        ps.execute();
+        return new Job(ps.lastInsertId());
+    }
+
+    public boolean waitFor(int max) throws InterruptedException {
+        long start = System.currentTimeMillis();
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `jobs` WHERE id=? AND state='open'");
+        ps.setInt(1, id);
+        GigiResultSet rs = ps.executeQuery();
+        while (rs.next()) {
+            rs.close();
+            if (max != 0 && System.currentTimeMillis() - start > max) {
+                return false;
+            }
+            Thread.sleep((long) (2000 + Math.random() * 2000));
+            rs = ps.executeQuery();
+        }
+        rs.close();
+        return true;
+    }
 }