]> WPIA git - gigi.git/blob - src/org/cacert/gigi/dbObjects/CertificateOwner.java
ADD: org certs.
[gigi.git] / src / org / cacert / gigi / dbObjects / CertificateOwner.java
1 package org.cacert.gigi.dbObjects;
2
3 import org.cacert.gigi.database.DatabaseConnection;
4 import org.cacert.gigi.database.GigiPreparedStatement;
5 import org.cacert.gigi.database.GigiResultSet;
6
7 public abstract class CertificateOwner implements IdCachable {
8
9     private int id;
10
11     public CertificateOwner(int id) {
12         this.id = id;
13     }
14
15     public CertificateOwner() {}
16
17     public int getId() {
18         return id;
19     }
20
21     private static ObjectCache<CertificateOwner> myCache = new ObjectCache<>();
22
23     public static synchronized CertificateOwner getById(int id) {
24         CertificateOwner u = myCache.get(id);
25         if (u == null) {
26             GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT *, users.id AS uid, organisations.id AS oid FROM certOwners LEFT JOIN users ON users.id=certOwners.id LEFT JOIN organisations ON organisations.id = certOwners.id WHERE certOwners.id=?");
27             ps.setInt(1, id);
28             GigiResultSet rs = ps.executeQuery();
29             if ( !rs.next()) {
30                 System.out.println("no " + id);
31             }
32             if (rs.getString("uid") != null) {
33                 myCache.put(u = new User(rs));
34             } else if (rs.getString("oid") != null) {
35                 myCache.put(u = new Organisation(rs));
36             } else {
37                 System.err.print("Malformed cert owner: " + id);
38             }
39         }
40         return u;
41     }
42
43     protected int insert() {
44         if (id != 0) {
45             throw new Error("refusing to insert");
46         }
47         synchronized (User.class) {
48             GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO certOwners() VALUES()");
49             ps.execute();
50             id = ps.lastInsertId();
51             myCache.put(this);
52         }
53         return id;
54     }
55
56 }