]> WPIA git - gigi.git/blob - src/org/cacert/gigi/dbObjects/Organisation.java
WIP orga-things
[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 void addAdmin(User admin, User actor, boolean master) {
104         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO org_admin SET orgid=?, memid=?, creator=?, master=?");
105         ps.setInt(1, getId());
106         ps.setInt(2, admin.getId());
107         ps.setInt(3, actor.getId());
108         ps.setString(4, master ? "y" : "n");
109         ps.execute();
110     }
111
112     public void removeAdmin(User admin, User actor) {
113         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE org_admin SET deleter=?, deleted=NOW() WHERE orgid=? AND memid=?");
114         ps.setInt(1, actor.getId());
115         ps.setInt(2, getId());
116         ps.setInt(3, admin.getId());
117         ps.execute();
118     }
119
120     public List<Affiliation> getAllAdmins() {
121         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT memid, master FROM org_admin WHERE orgid=? AND deleted is null");
122         ps.setInt(1, getId());
123         GigiResultSet rs = ps.executeQuery();
124         rs.last();
125         ArrayList<Affiliation> al = new ArrayList<>(rs.getRow());
126         rs.beforeFirst();
127         while (rs.next()) {
128             al.add(new Affiliation(User.getById(rs.getInt(1)), rs.getString(2).equals("y"), null));
129         }
130         return al;
131     }
132
133     public static Organisation[] getOrganisations(int offset, int count) {
134         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT id FROM organisations LIMIT ?,?");
135         ps.setInt(1, offset);
136         ps.setInt(2, count);
137         GigiResultSet res = ps.executeQuery();
138         res.last();
139         Organisation[] resu = new Organisation[res.getRow()];
140         res.beforeFirst();
141         int i = 0;
142         while (res.next()) {
143             resu[i++] = getById(res.getInt(1));
144         }
145         return resu;
146     }
147
148     public void update(String o, String c, String st, String l) {
149         for (Certificate cert : getCertificates()) {
150             if (cert.getStatus() == CertificateStatus.ISSUED) {
151                 cert.revoke();
152             }
153         }
154         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE organisations SET name=?, state=?, province=?, city=?");
155         ps.setString(1, o);
156         ps.setString(2, c);
157         ps.setString(3, st);
158         ps.setString(4, l);
159         ps.execute();
160         name = o;
161         state = c;
162         province = st;
163         city = l;
164     }
165 }