2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.acs.cpe.rpc;
\r
21 import java.util.HashMap;
\r
22 import java.util.Iterator;
\r
23 import java.util.LinkedHashSet;
\r
24 import java.util.Map;
\r
25 import java.util.Map.Entry;
\r
26 import java.util.Set;
\r
28 import javax.xml.soap.Name;
\r
29 import javax.xml.soap.SOAPBodyElement;
\r
30 import javax.xml.soap.SOAPElement;
\r
31 import javax.xml.soap.SOAPException;
\r
32 import javax.xml.soap.SOAPFactory;
\r
34 import org.commscope.tr069adapter.acs.cpe.TR069RPC;
\r
36 public class Inform extends TR069RPC {
\r
38 private static final long serialVersionUID = 929353181551497549L;
\r
40 public class Event implements Entry<String, String> {
\r
42 private String eventCode;
\r
43 private String cmdKey;
\r
45 public Event(String event, String cmdKey) {
\r
46 this.eventCode = event;
\r
47 this.cmdKey = cmdKey;
\r
50 public String getKey() {
\r
54 public String getValue() {
\r
58 public String setValue(String value) {
\r
64 protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {
\r
65 throw new UnsupportedOperationException();
\r
68 @SuppressWarnings("rawtypes")
\r
69 protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {
\r
70 SOAPElement deviceid = getRequestChildElement(spf, body, "DeviceId");
\r
71 defns = deviceid.getNamespaceURI();
\r
73 oui = getRequestElement(spf, deviceid, "OUI");
\r
74 sn = getRequestElement(spf, deviceid, "SerialNumber");
\r
75 manufacturer = getRequestElement(spf, deviceid, "Manufacturer");
\r
76 productClass = getRequestElement(spf, deviceid, "ProductClass");
\r
77 if (productClass == null) {
\r
80 maxEnvelopes = Integer.parseInt(getRequestElement(spf, body, "MaxEnvelopes"));
\r
81 retryCount = Integer.parseInt(getRequestElement(spf, body, "RetryCount"));
\r
82 currentTime = getRequestElement(spf, body, "CurrentTime");
\r
84 Iterator<SOAPElement> pi = getRequestChildElement(spf, body, "ParameterList")
\r
85 .getChildElements(spf.createName("ParameterValueStruct"));
\r
86 Name nameKey = spf.createName("Name");
\r
87 Name nameValue = spf.createName("Value");
\r
88 params = new HashMap<>();
\r
89 while (pi.hasNext()) {
\r
90 SOAPElement param = pi.next();
\r
91 String key = getRequestElement(param, nameKey);
\r
92 if (root == null && !key.startsWith(".")) {
\r
93 if (key.startsWith("Device.")) {
\r
96 root = "InternetGatewayDevice";
\r
101 value = getRequestElement(param, nameValue);
\r
102 value = setEmptyValueIfNull(value);
\r
103 } catch (Exception e) {
\r
104 logger.error("Exception while Inform parseBody. {}", e.toString());
\r
106 params.put(key, value);
\r
109 if (root == null) {
\r
110 throw new SOAPException("Invalid root. Must be InternetGatewayDevice or Device");
\r
113 pi = getRequestChildElement(spf, body, "Event").getChildElements(spf.createName("EventStruct"));
\r
114 Name eventCode = spf.createName("EventCode");
\r
115 Name commandKey = spf.createName(COMMAND_KEY);
\r
116 events = new LinkedHashSet<>();
\r
117 while (pi.hasNext()) {
\r
118 SOAPElement param = pi.next();
\r
119 String event = getRequestElement(param, eventCode);
\r
120 String cmdKey = getRequestElement(param, commandKey);
\r
121 cmdKey = setEmptyValueIfNull(cmdKey);
\r
122 events.add(new Event(event, cmdKey));
\r
127 private String setEmptyValueIfNull(String value) {
\r
134 public String getSoftwareVersion() {
\r
135 String v = params.get(root + ".DeviceInfo.SoftwareVersion");
\r
137 v = v.replace('-', '.');
\r
138 v = v.replace(',', ' ');
\r
143 public String getHardwareVersion() {
\r
144 return params.get(root + ".DeviceInfo.HardwareVersion");
\r
147 public String getConfigVersion() {
\r
148 return params.get(root + ".DeviceInfo.VendorConfigFile.1.Version");
\r
151 public String getURL() {
\r
152 String url = params.get(root + ".ManagementServer.ConnectionRequestURL");
\r
156 url = params.get(root + ".ManagementServer.UDPConnectionRequestAddress");
\r
158 url = (url.indexOf(':') == -1) ? "udp://" + url + ":80" : "udp://" + url;
\r
163 public String getConreqUser() {
\r
164 return params.get(root + ".ManagementServer.ConnectionRequestUsername");
\r
167 public String getConreqPass() {
\r
168 return params.get(root + ".ManagementServer.ConnectionRequestPassword");
\r
171 public String getProvisiongCode() {
\r
172 return params.get(root + ".DeviceInfo.ProvisioningCode");
\r
175 public void setProvisiongCode(String code) {
\r
176 params.put(root + ".DeviceInfo.ProvisioningCode", code);
\r
179 public String getRoot() {
\r
183 public boolean isEvent(String event) {
\r
184 for (Entry<String, String> e : events) {
\r
185 if (e.getKey().equals(event)) {
\r
193 public String toString() {
\r
194 StringBuilder s = new StringBuilder(1024);
\r
195 s.append("Inform:\n");
\r
196 println(s, "\toui: ", oui);
\r
197 println(s, "\tsn: ", sn);
\r
198 println(s, "\tManufacturer: ", manufacturer);
\r
200 s.append("\tEvents:\n");
\r
201 for (Entry<String, String> ev : events) {
\r
202 println(s, "\t\t", ev.getKey(), ev.getValue());
\r
205 s.append("\tParams:\n");
\r
206 for (Entry<String, String> k : params.entrySet()) {
\r
207 println(s, "\t\t", k.getKey(), k.getValue());
\r
209 return s.toString();
\r
212 private String oui;
\r
214 private String productClass;
\r
215 private String manufacturer;
\r
216 private int retryCount;
\r
217 private String currentTime;
\r
218 private Map<String, String> params;
\r
219 private transient Set<Entry<String, String>> events;
\r
220 private transient Set<Entry<String, String>> response;
\r
221 private int maxEnvelopes;
\r
222 private String defns;
\r
223 private String root = null;
\r
224 public static final String EVENT_BOOT_STRAP = "0 BOOTSTRAP";
\r
225 public static final String EVENT_BOOT = "1 BOOT";
\r
226 public static final String EVENT_PERIODIC = "2 PERIODIC";
\r
227 public static final String EVENT_SCHEDULED = "3 SCHEDULED";
\r
228 public static final String EVENT_VALUE_CHANGE = "4 VALUE CHANGE";
\r
229 public static final String EVENT_KICKED = "5 KICKED";
\r
230 public static final String EVENT_CONNECTION_REQUEST = "6 CONNECTION REQUEST";
\r
231 public static final String EVENT_TRANSFER_COMPLETE = "7 TRANSFER COMPLETE";
\r
233 public String getOui() {
\r
237 public void setOui(String oui) {
\r
241 public String getSn() {
\r
245 public void setSn(String sn) {
\r
249 public String getProductClass() {
\r
250 return productClass;
\r
253 public void setProductClass(String productClass) {
\r
254 this.productClass = productClass;
\r
257 public String getManufacturer() {
\r
258 return manufacturer;
\r
261 public void setManufacturer(String manufacturer) {
\r
262 this.manufacturer = manufacturer;
\r
265 public int getRetryCount() {
\r
269 public void setRetryCount(int retryCount) {
\r
270 this.retryCount = retryCount;
\r
273 public String getCurrentTime() {
\r
274 return currentTime;
\r
277 public void setCurrentTime(String currentTime) {
\r
278 this.currentTime = currentTime;
\r
281 public Map<String, String> getParams() {
\r
285 public void setParams(Map<String, String> params) {
\r
286 this.params = params;
\r
289 public Set<Entry<String, String>> getResponse() {
\r
293 public void setResponse(Set<Entry<String, String>> response) {
\r
294 this.response = response;
\r
297 public int getMaxEnvelopes() {
\r
298 return maxEnvelopes;
\r
301 public void setMaxEnvelopes(int maxEnvelopes) {
\r
302 this.maxEnvelopes = maxEnvelopes;
\r
305 public Set<Entry<String, String>> getEvents() {
\r
309 public void setEvents(Set<Entry<String, String>> events) {
\r
310 this.events = events;
\r
313 public String getDefns() {
\r
317 public void setDefns(String defns) {
\r
318 this.defns = defns;
\r