Update project structure to org.onap
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / Group.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * * \r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * * \r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 \r
24 package org.onap.dmaap.datarouter.provisioning.beans;\r
25 \r
26 import java.io.InvalidObjectException;\r
27 import java.sql.Connection;\r
28 import java.sql.PreparedStatement;\r
29 import java.sql.ResultSet;\r
30 import java.sql.SQLException;\r
31 import java.sql.Statement;\r
32 import java.util.ArrayList;\r
33 import java.util.Collection;\r
34 import java.util.Date;\r
35 import java.util.List;\r
36 \r
37 import org.apache.log4j.Logger;\r
38 import org.json.JSONObject;\r
39 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
40 import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities;\r
41 \r
42 /**\r
43  * The representation of a Subscription.  Subscriptions can be retrieved from the DB, or stored/updated in the DB.\r
44  * @author vikram\r
45  * @version $Id: Group.java,v 1.0 2016/07/19 \r
46  */\r
47 public class Group extends Syncable {\r
48         private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
49         private static int next_groupid = getMaxGroupID() + 1;\r
50 \r
51         private int groupid;\r
52         private String authid;\r
53         private String name;\r
54         private String description;\r
55         private String classification;\r
56         private String members;\r
57         private Date last_mod;\r
58         \r
59         \r
60         public static Group getGroupMatching(Group gup) {\r
61                 String sql = String.format(\r
62                         "select * from GROUPS where  NAME = \"%s\"",\r
63                         gup.getName()\r
64                 );\r
65                 List<Group> list = getGroupsForSQL(sql);\r
66                 return list.size() > 0 ? list.get(0) : null;\r
67         }\r
68         \r
69         public static Group getGroupMatching(Group gup, int groupid) {\r
70                 String sql = String.format(\r
71                         "select * from GROUPS where  NAME = \"%s\" and GROUPID != %d ",\r
72                         gup.getName(),\r
73                         gup.getGroupid()\r
74                 );\r
75                 List<Group> list = getGroupsForSQL(sql);\r
76                 return list.size() > 0 ? list.get(0) : null;\r
77         }\r
78         \r
79         public static Group getGroupById(int id) {\r
80                 String sql = "select * from GROUPS where GROUPID = " + id;\r
81                 List<Group> list = getGroupsForSQL(sql);\r
82                 return list.size() > 0 ? list.get(0) : null;\r
83         }\r
84         \r
85         public static Group getGroupByAuthId(String id) {\r
86                 String sql = "select * from GROUPS where AUTHID = '" + id +"'";\r
87                 List<Group> list = getGroupsForSQL(sql);\r
88                 return list.size() > 0 ? list.get(0) : null;\r
89         }\r
90         \r
91         public static Collection<Group> getAllgroups() {\r
92                 return getGroupsForSQL("select * from GROUPS");\r
93         }\r
94         private static List<Group> getGroupsForSQL(String sql) {\r
95                 List<Group> list = new ArrayList<Group>();\r
96                 try {\r
97                         DB db = new DB();\r
98                         @SuppressWarnings("resource")\r
99                         Connection conn = db.getConnection();\r
100                         Statement  stmt = conn.createStatement();\r
101                         ResultSet rs = stmt.executeQuery(sql);\r
102                         while (rs.next()) {\r
103                                 Group group = new Group(rs);\r
104                                 list.add(group);\r
105                         }\r
106                         rs.close();\r
107                         stmt.close();\r
108                         db.release(conn);\r
109                 } catch (SQLException e) {\r
110                         e.printStackTrace();\r
111                 }\r
112                 return list;\r
113         }\r
114         public static int getMaxGroupID() {\r
115                 int max = 0;\r
116                 try {\r
117                         DB db = new DB();\r
118                         @SuppressWarnings("resource")\r
119                         Connection conn = db.getConnection();\r
120                         Statement  stmt = conn.createStatement();\r
121                         ResultSet rs = stmt.executeQuery("select MAX(groupid) from GROUPS");\r
122                         if (rs.next()) {\r
123                                 max = rs.getInt(1);\r
124                         }\r
125                         rs.close();\r
126                         stmt.close();\r
127                         db.release(conn);\r
128                 } catch (SQLException e) {\r
129                         intlogger.info("getMaxSubID: "+e.getMessage());\r
130                         e.printStackTrace();\r
131                 }\r
132                 return max;\r
133         }\r
134         public static Collection<String> getGroupsByClassfication(String classfication) {\r
135                 List<String> list = new ArrayList<String>();\r
136                 String sql = "select * from GROUPS where classification = '"+classfication+"'";\r
137                 try {\r
138                         DB db = new DB();\r
139                         @SuppressWarnings("resource")\r
140                         Connection conn = db.getConnection();\r
141                         Statement  stmt = conn.createStatement();\r
142                         ResultSet  rs = stmt.executeQuery(sql);\r
143                         while (rs.next()) {\r
144                                 int groupid = rs.getInt("groupid");\r
145                                 //list.add(URLUtilities.generateSubscriptionURL(groupid));\r
146                         }\r
147                         rs.close();\r
148                         stmt.close();\r
149                         db.release(conn);\r
150                 } catch (SQLException e) {\r
151                         e.printStackTrace();\r
152                 }\r
153                 return list;\r
154         }\r
155         /**\r
156          * Return a count of the number of active subscriptions in the DB.\r
157          * @return the count\r
158          */\r
159         public static int countActiveSubscriptions() {\r
160                 int count = 0;\r
161                 try {\r
162                         DB db = new DB();\r
163                         @SuppressWarnings("resource")\r
164                         Connection conn = db.getConnection();\r
165                         Statement  stmt = conn.createStatement();\r
166                         ResultSet rs = stmt.executeQuery("select count(*) from SUBSCRIPTIONS");\r
167                         if (rs.next()) {\r
168                                 count = rs.getInt(1);\r
169                         }\r
170                         rs.close();\r
171                         stmt.close();\r
172                         db.release(conn);\r
173                 } catch (SQLException e) {\r
174                         intlogger.warn("PROV0008 countActiveSubscriptions: "+e.getMessage());\r
175                         e.printStackTrace();\r
176                 }\r
177                 return count;\r
178         }\r
179 \r
180         public Group() {\r
181                 this("", "", "");\r
182         }\r
183         public Group(String name, String desc, String members) {\r
184                 this.groupid = -1;\r
185                 this.authid = "";\r
186                 this.name = name;\r
187                 this.description = desc;\r
188                 this.members = members;\r
189                 this.classification = "";\r
190                 this.last_mod = new Date();\r
191         }\r
192         \r
193         \r
194         public Group(ResultSet rs) throws SQLException {\r
195                 this.groupid        = rs.getInt("GROUPID");\r
196                 this.authid       = rs.getString("AUTHID");\r
197                 this.name       = rs.getString("NAME");\r
198                 this.description       = rs.getString("DESCRIPTION");\r
199                 this.classification       = rs.getString("CLASSIFICATION");\r
200                 this.members       = rs.getString("MEMBERS");\r
201                 this.last_mod     = rs.getDate("LAST_MOD");\r
202         }\r
203         \r
204 \r
205         \r
206         public Group(JSONObject jo) throws InvalidObjectException {\r
207                 this("", "", "");\r
208                 try {\r
209                         // The JSONObject is assumed to contain a vnd.att-dr.group representation\r
210                         this.groupid  = jo.optInt("groupid", -1);\r
211                         String gname      = jo.getString("name");\r
212                         String gdescription     = jo.getString("description");\r
213                         \r
214                         this.authid = jo.getString("authid");\r
215                         this.name = gname;\r
216                         this.description = gdescription;\r
217                         this.classification = jo.getString("classification");\r
218                         this.members = jo.getString("members");\r
219                 \r
220                         if (gname.length() > 50)\r
221                                 throw new InvalidObjectException("Group name is too long");\r
222                         if (gdescription.length() > 256)\r
223                                 throw new InvalidObjectException("Group Description is too long");\r
224                 } catch (InvalidObjectException e) {\r
225                         throw e;\r
226                 } catch (Exception e) {\r
227                         throw new InvalidObjectException("invalid JSON: "+e.getMessage());\r
228                 }\r
229         }\r
230         public int getGroupid() {\r
231                 return groupid;\r
232         }\r
233         \r
234         public static Logger getIntlogger() {\r
235                 return intlogger;\r
236         }\r
237         public void setGroupid(int groupid) {\r
238                 this.groupid = groupid;\r
239         }\r
240         \r
241         public static void setIntlogger(Logger intlogger) {\r
242                 Group.intlogger = intlogger;\r
243         }\r
244         public static int getNext_groupid() {\r
245                 return next_groupid;\r
246         }\r
247         public static void setNext_groupid(int next_groupid) {\r
248                 Group.next_groupid = next_groupid;\r
249         }\r
250         public String getAuthid() {\r
251                 return authid;\r
252         }\r
253         public void setAuthid(String authid) {\r
254                 this.authid = authid;\r
255         }\r
256         public String getName() {\r
257                 return name;\r
258         }\r
259         public void setName(String name) {\r
260                 this.name = name;\r
261         }\r
262         public String getDescription() {\r
263                 return description;\r
264         }\r
265         public void setDescription(String description) {\r
266                 this.description = description;\r
267         }\r
268         public String getClassification() {\r
269                 return classification;\r
270         }\r
271         public void setClassification(String classification) {\r
272                 this.classification = classification;\r
273         }\r
274         public String getMembers() {\r
275                 return members;\r
276         }\r
277         public void setMembers(String members) {\r
278                 this.members = members;\r
279         }\r
280         public Date getLast_mod() {\r
281                 return last_mod;\r
282         }\r
283         public void setLast_mod(Date last_mod) {\r
284                 this.last_mod = last_mod;\r
285         }\r
286         \r
287 \r
288         @Override\r
289         public JSONObject asJSONObject() {\r
290                 JSONObject jo = new JSONObject();\r
291                 jo.put("groupid", groupid);\r
292                 jo.put("authid", authid);\r
293                 jo.put("name", name);\r
294                 jo.put("description", description);\r
295                 jo.put("classification", classification);\r
296                 jo.put("members", members);\r
297                 jo.put("last_mod", last_mod.getTime());\r
298                 return jo;\r
299         }\r
300         @Override\r
301         public boolean doInsert(Connection c) {\r
302                 boolean rv = true;\r
303                 PreparedStatement ps = null;\r
304                 try {\r
305                         if (groupid == -1) {\r
306                                 // No feed ID assigned yet, so assign the next available one\r
307                                 setGroupid(next_groupid++);\r
308                         }\r
309                         // In case we insert a gropup from synchronization\r
310                         if (groupid > next_groupid)\r
311                                 next_groupid = groupid+1;\r
312 \r
313                         \r
314                         // Create the GROUPS row\r
315                         String sql = "insert into GROUPS (GROUPID, AUTHID, NAME, DESCRIPTION, CLASSIFICATION, MEMBERS) values (?, ?, ?, ?, ?, ?)";\r
316                         ps = c.prepareStatement(sql, new String[] { "GROUPID" });\r
317                         ps.setInt(1, groupid);\r
318                         ps.setString(2, authid);\r
319                         ps.setString(3, name);\r
320                         ps.setString(4, description);\r
321                         ps.setString(5, classification);\r
322                         ps.setString(6, members);\r
323                         ps.execute();\r
324                         ps.close();\r
325                 } catch (SQLException e) {\r
326                         rv = false;\r
327                         intlogger.warn("PROV0005 doInsert: "+e.getMessage());\r
328                         e.printStackTrace();\r
329                 } finally {\r
330                         try {\r
331                                 ps.close();\r
332                         } catch (SQLException e) {\r
333                                 e.printStackTrace();\r
334                         }\r
335                 }\r
336                 return rv;\r
337         }\r
338         @Override\r
339         public boolean doUpdate(Connection c) {\r
340                 boolean rv = true;\r
341                 PreparedStatement ps = null;\r
342                 try {\r
343                         String sql = "update GROUPS set AUTHID = ?, NAME = ?, DESCRIPTION = ?, CLASSIFICATION = ? ,  MEMBERS = ? where GROUPID = ?";\r
344                         ps = c.prepareStatement(sql);\r
345                         ps.setString(1, authid);\r
346                         ps.setString(2, name);\r
347                         ps.setString(3, description);\r
348                         ps.setString(4, classification);\r
349                         ps.setString(5, members);\r
350                         ps.setInt(6, groupid);\r
351                         ps.executeUpdate();\r
352                 } catch (SQLException e) {\r
353                         rv = false;\r
354                         intlogger.warn("PROV0006 doUpdate: "+e.getMessage());\r
355                         e.printStackTrace();\r
356                 } finally {\r
357                         try {\r
358                                 ps.close();\r
359                         } catch (SQLException e) {\r
360                                 e.printStackTrace();\r
361                         }\r
362                 }\r
363                 return rv;\r
364         }\r
365         @Override\r
366         public boolean doDelete(Connection c) {\r
367                 boolean rv = true;\r
368                 PreparedStatement ps = null;\r
369                 try {\r
370                         String sql = "delete from GROUPS where GROUPID = ?";\r
371                         ps = c.prepareStatement(sql);\r
372                         ps.setInt(1, groupid);\r
373                         ps.execute();\r
374                 } catch (SQLException e) {\r
375                         rv = false;\r
376                         intlogger.warn("PROV0007 doDelete: "+e.getMessage());\r
377                         e.printStackTrace();\r
378                 } finally {\r
379                         try {\r
380                                 ps.close();\r
381                         } catch (SQLException e) {\r
382                                 e.printStackTrace();\r
383                         }\r
384                 }\r
385                 return rv;\r
386         }\r
387         @Override\r
388         public String getKey() {\r
389                 return ""+getGroupid();\r
390         }\r
391         @Override\r
392         public boolean equals(Object obj) {\r
393                 if (!(obj instanceof Group))\r
394                         return false;\r
395                 Group os = (Group) obj;\r
396                 if (groupid != os.groupid)\r
397                         return false;\r
398                 if (authid != os.authid)\r
399                         return false;\r
400                 if (!name.equals(os.name))\r
401                         return false;\r
402                 if (description != os.description)\r
403                         return false;\r
404                 if (!classification.equals(os.classification))\r
405                         return false;\r
406                 if (!members.equals(os.members))\r
407                         return false;\r
408                 \r
409                 return true;\r
410         }\r
411 \r
412         @Override\r
413         public String toString() {\r
414                 return "GROUP: groupid=" + groupid;\r
415         }\r
416 }\r