]> WPIA git - gigi.git/blob - src/org/cacert/gigi/dbObjects/Organisation.java
407fcb5916c2c7fff3bf1605639b44333a6b3f04
[gigi.git] / src / org / cacert / gigi / dbObjects / Organisation.java
1 package org.cacert.gigi.dbObjects;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.cacert.gigi.database.DatabaseConnection;
7 import org.cacert.gigi.database.GigiPreparedStatement;
8 import org.cacert.gigi.database.GigiResultSet;
9 import org.cacert.gigi.dbObjects.Certificate.CertificateStatus;
10
11 public class Organisation extends CertificateOwner {
12
13     public class Affiliation {
14
15         private final User target;
16
17         private final boolean master;
18
19         private final String fixedOU;
20
21         public Affiliation(User target, boolean master, String fixedOU) {
22             this.target = target;
23             this.master = master;
24             this.fixedOU = fixedOU;
25         }
26
27         public User getTarget() {
28             return target;
29         }
30
31         public boolean isMaster() {
32             return master;
33         }
34
35         public String getFixedOU() {
36             return fixedOU;
37         }
38
39         public Organisation getOrganisation() {
40             return Organisation.this;
41         }
42     }
43
44     private String name;
45
46     private String state;
47
48     private String province;
49
50     private String city;
51
52     public Organisation(String name, String state, String province, String city, User creator) {
53         this.name = name;
54         this.state = state;
55         this.province = province;
56         this.city = city;
57         int id = super.insert();
58         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, creator=?");
59         ps.setInt(1, id);
60         ps.setString(2, name);
61         ps.setString(3, state);
62         ps.setString(4, province);
63         ps.setString(5, city);
64         ps.setInt(6, creator.getId());
65         synchronized (Organisation.class) {
66             ps.execute();
67         }
68
69     }
70
71     protected Organisation(GigiResultSet rs) {
72         super(rs.getInt("id"));
73         name = rs.getString("name");
74         state = rs.getString("state");
75         province = rs.getString("province");
76         city = rs.getString("city");
77     }
78
79     public String getName() {
80         return name;
81     }
82
83     public String getState() {
84         return state;
85     }
86
87     public String getProvince() {
88         return province;
89     }
90
91     public String getCity() {
92         return city;
93     }
94
95     public static synchronized Organisation getById(int id) {
96         CertificateOwner co = CertificateOwner.getById(id);
97         if (co instanceof Organisation) {
98             return (Organisation) co;
99         }
100         return null;
101     }
102
103     public synchronized void addAdmin(User admin, User actor, boolean master) {
104         GigiPreparedStatement ps1 = DatabaseConnection.getInstance().prepare("SELECT 1 FROM org_admin WHERE orgid=? AND memid=? AND deleted is null");
105         ps1.setInt(1, getId());
106         ps1.setInt(2, admin.getId());
107         GigiResultSet result = ps1.executeQuery();
108         if (result.next()) {
109             return;
110         }
111         GigiPreparedStatement ps2 = DatabaseConnection.getInstance().prepare("INSERT INTO org_admin SET orgid=?, memid=?, creator=?, master=?");
112         ps2.setInt(1, getId());
113         ps2.setInt(2, admin.getId());
114         ps2.setInt(3, actor.getId());
115         ps2.setString(4, master ? "y" : "n");
116         ps2.execute();
117     }
118
119     public void removeAdmin(User admin, User actor) {
120         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE org_admin SET deleter=?, deleted=NOW() WHERE orgid=? AND memid=?");
121         ps.setInt(1, actor.getId());
122         ps.setInt(2, getId());
123         ps.setInt(3, admin.getId());
124         ps.execute();
125     }
126
127     public List<Affiliation> getAllAdmins() {
128         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, master FROM org_admin WHERE orgid=? AND deleted is null");
129         ps.setInt(1, getId());
130         GigiResultSet rs = ps.executeQuery();
131         rs.last();
132         ArrayList<Affiliation> al = new ArrayList<>(rs.getRow());
133         rs.beforeFirst();
134         while (rs.next()) {
135             al.add(new Affiliation(User.getById(rs.getInt(1)), rs.getString(2).equals("y"), null));
136         }
137         return al;
138     }
139
140     public static Organisation[] getOrganisations(int offset, int count) {
141         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT certOwners.id FROM organisations inner join certOwners on certOwners.id=organisations.id where certOwners.deleted is null LIMIT ?,?");
142         ps.setInt(1, offset);
143         ps.setInt(2, count);
144         GigiResultSet res = ps.executeQuery();
145         res.last();
146         Organisation[] resu = new Organisation[res.getRow()];
147         res.beforeFirst();
148         int i = 0;
149         while (res.next()) {
150             resu[i++] = getById(res.getInt(1));
151         }
152         return resu;
153     }
154
155     public void update(String o, String c, String st, String l) {
156         for (Certificate cert : getCertificates(false)) {
157             if (cert.getStatus() == CertificateStatus.ISSUED) {
158                 cert.revoke();
159             }
160         }
161         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE organisations SET name=?, state=?, province=?, city=?");
162         ps.setString(1, o);
163         ps.setString(2, c);
164         ps.setString(3, st);
165         ps.setString(4, l);
166         ps.execute();
167         name = o;
168         state = c;
169         province = st;
170         city = l;
171     }
172 }