1 /*******************************************************************************
\r
2 * ============LICENSE_START==================================================
\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
11 * * http://www.apache.org/licenses/LICENSE-2.0
\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
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
\r
22 ******************************************************************************/
\r
24 package org.onap.dmaap.datarouter.provisioning.beans;
\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
34 import org.apache.log4j.Logger;
\r
35 import org.json.JSONObject;
\r
36 import org.onap.dmaap.datarouter.provisioning.utils.DB;
\r
37 import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities;
\r
40 * The representation of a Subscription. Subscriptions can be retrieved from the DB, or stored/updated in the DB.
\r
43 * @version $Id: Group.java,v 1.0 2016/07/19
\r
45 public class Group extends Syncable {
\r
46 private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
\r
47 private static int next_groupid = getMaxGroupID() + 1;
\r
49 private int groupid;
\r
50 private String authid;
\r
51 private String name;
\r
52 private String description;
\r
53 private String classification;
\r
54 private String members;
\r
55 private Date last_mod;
\r
58 public static Group getGroupMatching(Group gup) {
\r
59 String sql = String.format(
\r
60 "select * from GROUPS where NAME='%s'",
\r
63 List<Group> list = getGroupsForSQL(sql);
\r
64 return list.size() > 0 ? list.get(0) : null;
\r
67 public static Group getGroupMatching(Group gup, int groupid) {
\r
68 String sql = String.format(
\r
69 "select * from GROUPS where NAME = '%s' and GROUPID != %d ",
\r
73 List<Group> list = getGroupsForSQL(sql);
\r
74 return list.size() > 0 ? list.get(0) : null;
\r
77 public static Group getGroupById(int id) {
\r
78 String sql = "select * from GROUPS where GROUPID = " + id;
\r
79 List<Group> list = getGroupsForSQL(sql);
\r
80 return list.size() > 0 ? list.get(0) : null;
\r
83 public static Group getGroupByAuthId(String id) {
\r
84 String sql = "select * from GROUPS where AUTHID = '" + id + "'";
\r
85 List<Group> list = getGroupsForSQL(sql);
\r
86 return list.size() > 0 ? list.get(0) : null;
\r
89 public static Collection<Group> getAllgroups() {
\r
90 return getGroupsForSQL("select * from GROUPS");
\r
93 private static List<Group> getGroupsForSQL(String sql) {
\r
94 List<Group> list = new ArrayList<Group>();
\r
97 @SuppressWarnings("resource")
\r
98 Connection conn = db.getConnection();
\r
99 try(Statement stmt = conn.createStatement()) {
\r
100 try(ResultSet rs = stmt.executeQuery(sql)) {
\r
101 while (rs.next()) {
\r
102 Group group = new Group(rs);
\r
108 } catch (SQLException e) {
\r
109 e.printStackTrace();
\r
114 public static int getMaxGroupID() {
\r
118 @SuppressWarnings("resource")
\r
119 Connection conn = db.getConnection();
\r
120 try(Statement stmt = conn.createStatement()) {
\r
121 try(ResultSet rs = stmt.executeQuery("select MAX(groupid) from GROUPS")) {
\r
123 max = rs.getInt(1);
\r
128 } catch (SQLException e) {
\r
129 intlogger.info("getMaxSubID: " + e.getMessage());
\r
130 e.printStackTrace();
\r
135 public static Collection<String> getGroupsByClassfication(String classfication) {
\r
136 List<String> list = new ArrayList<>();
\r
137 String sql = "select * from GROUPS where classification = ?";
\r
140 @SuppressWarnings("resource")
\r
141 Connection conn = db.getConnection();
\r
142 try(PreparedStatement stmt = conn.prepareStatement(sql)) {
\r
143 stmt.setString(1, classfication);
\r
144 try(ResultSet rs = stmt.executeQuery()) {
\r
145 while (rs.next()) {
\r
146 int groupid = rs.getInt("groupid");
\r
152 } catch (SQLException e) {
\r
153 e.printStackTrace();
\r
159 * Return a count of the number of active subscriptions in the DB.
\r
161 * @return the count
\r
163 public static int countActiveSubscriptions() {
\r
167 @SuppressWarnings("resource")
\r
168 Connection conn = db.getConnection();
\r
169 try(Statement stmt = conn.createStatement()) {
\r
170 try(ResultSet rs = stmt.executeQuery("select count(*) from SUBSCRIPTIONS")) {
\r
172 count = rs.getInt(1);
\r
177 } catch (SQLException e) {
\r
178 intlogger.warn("PROV0008 countActiveSubscriptions: " + e.getMessage());
\r
179 e.printStackTrace();
\r
188 public Group(String name, String desc, String members) {
\r
192 this.description = desc;
\r
193 this.members = members;
\r
194 this.classification = "";
\r
195 this.last_mod = new Date();
\r
199 public Group(ResultSet rs) throws SQLException {
\r
200 this.groupid = rs.getInt("GROUPID");
\r
201 this.authid = rs.getString("AUTHID");
\r
202 this.name = rs.getString("NAME");
\r
203 this.description = rs.getString("DESCRIPTION");
\r
204 this.classification = rs.getString("CLASSIFICATION");
\r
205 this.members = rs.getString("MEMBERS");
\r
206 this.last_mod = rs.getDate("LAST_MOD");
\r
210 public Group(JSONObject jo) throws InvalidObjectException {
\r
213 // The JSONObject is assumed to contain a vnd.att-dr.group representation
\r
214 this.groupid = jo.optInt("groupid", -1);
\r
215 String gname = jo.getString("name");
\r
216 String gdescription = jo.getString("description");
\r
218 this.authid = jo.getString("authid");
\r
220 this.description = gdescription;
\r
221 this.classification = jo.getString("classification");
\r
222 this.members = jo.getString("members");
\r
224 if (gname.length() > 50)
\r
225 throw new InvalidObjectException("Group name is too long");
\r
226 if (gdescription.length() > 256)
\r
227 throw new InvalidObjectException("Group Description is too long");
\r
228 } catch (InvalidObjectException e) {
\r
230 } catch (Exception e) {
\r
231 throw new InvalidObjectException("invalid JSON: " + e.getMessage());
\r
235 public int getGroupid() {
\r
239 public static Logger getIntlogger() {
\r
243 public void setGroupid(int groupid) {
\r
244 this.groupid = groupid;
\r
247 public static void setIntlogger(Logger intlogger) {
\r
248 Group.intlogger = intlogger;
\r
251 public static int getNext_groupid() {
\r
252 return next_groupid;
\r
255 public static void setNext_groupid(int next_groupid) {
\r
256 Group.next_groupid = next_groupid;
\r
259 public String getAuthid() {
\r
263 public void setAuthid(String authid) {
\r
264 this.authid = authid;
\r
267 public String getName() {
\r
271 public void setName(String name) {
\r
275 public String getDescription() {
\r
276 return description;
\r
279 public void setDescription(String description) {
\r
280 this.description = description;
\r
283 public String getClassification() {
\r
284 return classification;
\r
287 public void setClassification(String classification) {
\r
288 this.classification = classification;
\r
291 public String getMembers() {
\r
295 public void setMembers(String members) {
\r
296 this.members = members;
\r
299 public Date getLast_mod() {
\r
303 public void setLast_mod(Date last_mod) {
\r
304 this.last_mod = last_mod;
\r
309 public JSONObject asJSONObject() {
\r
310 JSONObject jo = new JSONObject();
\r
311 jo.put("groupid", groupid);
\r
312 jo.put("authid", authid);
\r
313 jo.put("name", name);
\r
314 jo.put("description", description);
\r
315 jo.put("classification", classification);
\r
316 jo.put("members", members);
\r
317 jo.put("last_mod", last_mod.getTime());
\r
322 public boolean doInsert(Connection c) {
\r
324 PreparedStatement ps = null;
\r
326 if (groupid == -1) {
\r
327 // No feed ID assigned yet, so assign the next available one
\r
328 setGroupid(next_groupid++);
\r
330 // In case we insert a gropup from synchronization
\r
331 if (groupid > next_groupid)
\r
332 next_groupid = groupid + 1;
\r
335 // Create the GROUPS row
\r
336 String sql = "insert into GROUPS (GROUPID, AUTHID, NAME, DESCRIPTION, CLASSIFICATION, MEMBERS) values (?, ?, ?, ?, ?, ?)";
\r
337 ps = c.prepareStatement(sql, new String[]{"GROUPID"});
\r
338 ps.setInt(1, groupid);
\r
339 ps.setString(2, authid);
\r
340 ps.setString(3, name);
\r
341 ps.setString(4, description);
\r
342 ps.setString(5, classification);
\r
343 ps.setString(6, members);
\r
346 } catch (SQLException e) {
\r
348 intlogger.warn("PROV0005 doInsert: " + e.getMessage());
\r
349 e.printStackTrace();
\r
355 } catch (SQLException e) {
\r
356 e.printStackTrace();
\r
363 public boolean doUpdate(Connection c) {
\r
365 PreparedStatement ps = null;
\r
367 String sql = "update GROUPS set AUTHID = ?, NAME = ?, DESCRIPTION = ?, CLASSIFICATION = ? , MEMBERS = ? where GROUPID = ?";
\r
368 ps = c.prepareStatement(sql);
\r
369 ps.setString(1, authid);
\r
370 ps.setString(2, name);
\r
371 ps.setString(3, description);
\r
372 ps.setString(4, classification);
\r
373 ps.setString(5, members);
\r
374 ps.setInt(6, groupid);
\r
375 ps.executeUpdate();
\r
376 } catch (SQLException e) {
\r
378 intlogger.warn("PROV0006 doUpdate: " + e.getMessage());
\r
379 e.printStackTrace();
\r
385 } catch (SQLException e) {
\r
386 e.printStackTrace();
\r
393 public boolean doDelete(Connection c) {
\r
395 PreparedStatement ps = null;
\r
397 String sql = "delete from GROUPS where GROUPID = ?";
\r
398 ps = c.prepareStatement(sql);
\r
399 ps.setInt(1, groupid);
\r
401 } catch (SQLException e) {
\r
403 intlogger.warn("PROV0007 doDelete: " + e.getMessage());
\r
404 e.printStackTrace();
\r
410 } catch (SQLException e) {
\r
411 e.printStackTrace();
\r
418 public String getKey() {
\r
419 return "" + getGroupid();
\r
423 public boolean equals(Object obj) {
\r
424 if (!(obj instanceof Group))
\r
426 Group os = (Group) obj;
\r
427 if (groupid != os.groupid)
\r
429 if (authid != os.authid)
\r
431 if (!name.equals(os.name))
\r
433 if (description != os.description)
\r
435 if (!classification.equals(os.classification))
\r
437 if (!members.equals(os.members))
\r
444 public String toString() {
\r
445 return "GROUP: groupid=" + groupid;
\r
449 public int hashCode() {
\r
450 return Objects.hash(groupid, authid, name, description, classification, members, last_mod);
\r