Fixed Sonar Issues in LogRecord.java
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / LogRecord.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 \r
25 package org.onap.dmaap.datarouter.provisioning.beans;\r
26 \r
27 import java.io.IOException;\r
28 import java.io.OutputStream;\r
29 import java.sql.Connection;\r
30 import java.sql.PreparedStatement;\r
31 import java.sql.ResultSet;\r
32 import java.sql.SQLException;\r
33 import java.sql.Statement;\r
34 import java.sql.Types;\r
35 import java.text.ParseException;\r
36 import java.util.Iterator;\r
37 \r
38 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
39 import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet;\r
40 \r
41 /**\r
42  * The representation of a Log Record, as retrieved from the DB.  Since this record format is only used\r
43  * to replicate between provisioning servers, it is very bare-bones; e.g. there are no field setters and only 1 getter.\r
44  *\r
45  * @author Robert Eby\r
46  * @version $Id: LogRecord.java,v 1.7 2014/03/12 19:45:41 eby Exp $\r
47  */\r
48 public class LogRecord extends BaseLogRecord {\r
49     /**\r
50      * Print all log records whose RECORD_IDs are in the bit set provided.\r
51      *\r
52      * @param os the {@link OutputStream} to print the records on\r
53      * @param bs the {@link RLEBitSet} listing the record IDs to print\r
54      * @throws IOException\r
55      */\r
56     public static void printLogRecords(OutputStream os, RLEBitSet bs) throws IOException {\r
57         final String sql = "select * from LOG_RECORDS where RECORD_ID >= ? AND RECORD_ID <= ?";\r
58         DB db = new DB();\r
59         Connection conn = null;\r
60         try {\r
61             conn = db.getConnection();\r
62             try(Statement stmt = conn.createStatement()) {\r
63                 Iterator<Long[]> iter = bs.getRangeIterator();\r
64                 try(PreparedStatement ps = conn.prepareStatement(sql)) {\r
65                     while (iter.hasNext()) {\r
66                         Long[] n = iter.next();\r
67                         ps.setLong(1, n[0]);\r
68                         ps.setLong(2, n[1]);\r
69                         try(ResultSet rs = ps.executeQuery()) {\r
70                             while (rs.next()) {\r
71                                 LogRecord lr = new LogRecord(rs);\r
72                                 os.write(lr.toString().getBytes());\r
73                             }\r
74                             ps.clearParameters();\r
75                         }\r
76                     }\r
77                 }\r
78             }\r
79         } catch (SQLException e) {\r
80             e.printStackTrace();\r
81         } finally {\r
82             if (conn != null)\r
83                 db.release(conn);\r
84         }\r
85     }\r
86 \r
87     private final String type;\r
88     private final String feedFileid;\r
89     private final String remoteAddr;\r
90     private final String user;\r
91     private final int status;\r
92     private final int subid;\r
93     private final String fileid;\r
94     private final int result;\r
95     private final int attempts;\r
96     private final String reason;\r
97     private final long record_id;\r
98     private final long clength2;\r
99 \r
100     public LogRecord(ResultSet rs) throws SQLException {\r
101         super(rs);\r
102         this.type = rs.getString("TYPE");\r
103         this.feedFileid = rs.getString("FEED_FILEID");\r
104         this.remoteAddr = rs.getString("REMOTE_ADDR");\r
105         this.user = rs.getString("USER");\r
106         this.status = rs.getInt("STATUS");\r
107 \r
108         this.subid = rs.getInt("DELIVERY_SUBID");\r
109         this.fileid = rs.getString("DELIVERY_FILEID");\r
110         this.result = rs.getInt("RESULT");\r
111 \r
112         this.attempts = rs.getInt("ATTEMPTS");\r
113         this.reason = rs.getString("REASON");\r
114 \r
115         this.record_id = rs.getLong("RECORD_ID");\r
116         this.clength2 = rs.getLong("CONTENT_LENGTH_2");\r
117     }\r
118 \r
119     public LogRecord(String[] pp) throws ParseException {\r
120         super(pp);\r
121         this.type = pp[8];\r
122         this.feedFileid = pp[9];\r
123         this.remoteAddr = pp[10];\r
124         this.user = pp[11];\r
125         this.status = Integer.parseInt(pp[12]);\r
126 \r
127         this.subid = Integer.parseInt(pp[13]);\r
128         this.fileid = pp[14];\r
129         this.result = Integer.parseInt(pp[15]);\r
130 \r
131         this.attempts = Integer.parseInt(pp[16]);\r
132         this.reason = pp[17];\r
133 \r
134         this.record_id = Long.parseLong(pp[18]);\r
135         this.clength2 = (pp.length == 20) ? Long.parseLong(pp[19]) : 0;\r
136     }\r
137 \r
138     public long getRecordId() {\r
139         return record_id;\r
140     }\r
141 \r
142     @Override\r
143     public String toString() {\r
144         return\r
145                 sdf.format(getEventTime()) + "|"\r
146                         + "LOG|"\r
147                         + getPublishId() + "|"\r
148                         + getFeedid() + "|"\r
149                         + getRequestUri() + "|"\r
150                         + getMethod() + "|"\r
151                         + getContentType() + "|"\r
152                         + getContentLength() + "|"\r
153                         + type + "|"\r
154                         + feedFileid + "|"\r
155                         + remoteAddr + "|"\r
156                         + user + "|"\r
157                         + status + "|"\r
158                         + subid + "|"\r
159                         + fileid + "|"\r
160                         + result + "|"\r
161                         + attempts + "|"\r
162                         + reason + "|"\r
163                         + record_id + "|"\r
164                         + clength2\r
165                         + "\n";\r
166     }\r
167 \r
168     @Override\r
169     public void load(PreparedStatement ps) throws SQLException {\r
170         ps.setString(1, type);\r
171         super.load(ps);                // loads fields 2-8\r
172         if (type.equals("pub")) {\r
173             ps.setString(9, feedFileid);\r
174             ps.setString(10, remoteAddr);\r
175             ps.setString(11, user);\r
176             ps.setInt(12, status);\r
177             ps.setNull(13, Types.INTEGER);\r
178             ps.setNull(14, Types.VARCHAR);\r
179             ps.setNull(15, Types.INTEGER);\r
180             ps.setNull(16, Types.INTEGER);\r
181             ps.setNull(17, Types.VARCHAR);\r
182             ps.setLong(18, record_id);\r
183             ps.setNull(19, Types.BIGINT);\r
184         } else if (type.equals("del")) {\r
185             ps.setNull(9, Types.VARCHAR);\r
186             ps.setNull(10, Types.VARCHAR);\r
187             ps.setString(11, user);\r
188             ps.setNull(12, Types.INTEGER);\r
189             ps.setInt(13, subid);\r
190             ps.setString(14, fileid);\r
191             ps.setInt(15, result);\r
192             ps.setNull(16, Types.INTEGER);\r
193             ps.setNull(17, Types.VARCHAR);\r
194             ps.setLong(18, record_id);\r
195             ps.setNull(19, Types.BIGINT);\r
196         } else if (type.equals("exp")) {\r
197             ps.setNull(9, Types.VARCHAR);\r
198             ps.setNull(10, Types.VARCHAR);\r
199             ps.setNull(11, Types.VARCHAR);\r
200             ps.setNull(12, Types.INTEGER);\r
201             ps.setInt(13, subid);\r
202             ps.setString(14, fileid);\r
203             ps.setNull(15, Types.INTEGER);\r
204             ps.setInt(16, attempts);\r
205             ps.setString(17, reason);\r
206             ps.setLong(18, record_id);\r
207             ps.setNull(19, Types.BIGINT);\r
208         } else if (type.equals("pbf")) {\r
209             ps.setString(9, feedFileid);\r
210             ps.setString(10, remoteAddr);\r
211             ps.setString(11, user);\r
212             ps.setNull(12, Types.INTEGER);\r
213             ps.setNull(13, Types.INTEGER);\r
214             ps.setNull(14, Types.VARCHAR);\r
215             ps.setNull(15, Types.INTEGER);\r
216             ps.setNull(16, Types.INTEGER);\r
217             ps.setNull(17, Types.VARCHAR);\r
218             ps.setLong(18, record_id);\r
219             ps.setLong(19, clength2);\r
220         } else if (type.equals("dlx")) {\r
221             ps.setNull(9, Types.VARCHAR);\r
222             ps.setNull(10, Types.VARCHAR);\r
223             ps.setNull(11, Types.VARCHAR);\r
224             ps.setNull(12, Types.INTEGER);\r
225             ps.setInt(13, subid);\r
226             ps.setNull(14, Types.VARCHAR);\r
227             ps.setNull(15, Types.INTEGER);\r
228             ps.setNull(16, Types.INTEGER);\r
229             ps.setNull(17, Types.VARCHAR);\r
230             ps.setLong(18, record_id);\r
231             ps.setLong(19, clength2);\r
232         }\r
233     }\r
234 \r
235     public static void main(String[] a) throws IOException {\r
236         LogRecord.printLogRecords(System.out, new RLEBitSet(a[0]));\r
237     }\r
238 }\r