[DB]: Add orgAdmin management code
[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
10 public class Organisation extends CertificateOwner {
11
12     private final String name;
13
14     private final String state;
15
16     private final String province;
17
18     private final String city;
19
20     public Organisation(String name, String state, String province, String city, User creator) {
21         this.name = name;
22         this.state = state;
23         this.province = province;
24         this.city = city;
25         int id = super.insert();
26         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, creator=?");
27         ps.setInt(1, id);
28         ps.setString(2, name);
29         ps.setString(3, state);
30         ps.setString(4, province);
31         ps.setString(5, city);
32         ps.setInt(6, creator.getId());
33         synchronized (Organisation.class) {
34             ps.execute();
35         }
36
37     }
38
39     protected Organisation(GigiResultSet rs) {
40         name = rs.getString("name");
41         state = rs.getString("state");
42         province = rs.getString("province");
43         city = rs.getString("city");
44     }
45
46     public String getName() {
47         return name;
48     }
49
50     public String getState() {
51         return state;
52     }
53
54     public String getProvince() {
55         return province;
56     }
57
58     public String getCity() {
59         return city;
60     }
61
62     public static synchronized Organisation getById(int id) {
63         CertificateOwner co = CertificateOwner.getById(id);
64         if (co instanceof Organisation) {
65             return (Organisation) co;
66         }
67         return null;
68     }
69
70     public void addAdmin(User admin, User actor) {
71         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO org_admin SET orgid=?, memid=?, creator=?");
72         ps.setInt(1, getId());
73         ps.setInt(2, admin.getId());
74         ps.setInt(3, actor.getId());
75         ps.execute();
76     }
77
78     public void removeAdmin(User admin, User actor) {
79         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE org_admin SET deleter=?, deleted=NOW() WHERE orgid=? AND memid=?");
80         ps.setInt(1, actor.getId());
81         ps.setInt(2, getId());
82         ps.setInt(3, admin.getId());
83         ps.execute();
84     }
85
86     public List<User> getAllAdmins() {
87         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid FROM org_admin WHERE orgid=? AND deleted is null");
88         ps.setInt(1, getId());
89         GigiResultSet rs = ps.executeQuery();
90         rs.last();
91         ArrayList<User> al = new ArrayList<>(rs.getRow());
92         rs.beforeFirst();
93         while (rs.next()) {
94             al.add(User.getById(rs.getInt(1)));
95         }
96         return al;
97     }
98 }