--- /dev/null
+/*\r
+ * ============LICENSE_START========================================================================\r
+ * ONAP : tr-069-adapter\r
+ * =================================================================================================\r
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
+ * =================================================================================================\r
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
+ * may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
+ * either express or implied. See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ===============LICENSE_END=======================================================================\r
+ */\r
+\r
+package org.commscope.tr069adapter.acs.cpe.rpc;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.LinkedHashSet;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+import java.util.Set;\r
+\r
+import javax.xml.soap.Name;\r
+import javax.xml.soap.SOAPBodyElement;\r
+import javax.xml.soap.SOAPElement;\r
+import javax.xml.soap.SOAPException;\r
+import javax.xml.soap.SOAPFactory;\r
+\r
+import org.commscope.tr069adapter.acs.cpe.TR069RPC;\r
+\r
+public class Inform extends TR069RPC {\r
+\r
+ private static final long serialVersionUID = 929353181551497549L;\r
+\r
+ public class Event implements Entry<String, String> {\r
+\r
+ private String eventCode;\r
+ private String cmdKey;\r
+\r
+ public Event(String event, String cmdKey) {\r
+ this.eventCode = event;\r
+ this.cmdKey = cmdKey;\r
+ }\r
+\r
+ public String getKey() {\r
+ return eventCode;\r
+ }\r
+\r
+ public String getValue() {\r
+ return cmdKey;\r
+ }\r
+\r
+ public String setValue(String value) {\r
+ cmdKey = value;\r
+ return cmdKey;\r
+ }\r
+ }\r
+\r
+ protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @SuppressWarnings("rawtypes")\r
+ protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {\r
+ SOAPElement deviceid = getRequestChildElement(spf, body, "DeviceId");\r
+ defns = deviceid.getNamespaceURI();\r
+\r
+ oui = getRequestElement(spf, deviceid, "OUI");\r
+ sn = getRequestElement(spf, deviceid, "SerialNumber");\r
+ manufacturer = getRequestElement(spf, deviceid, "Manufacturer");\r
+ productClass = getRequestElement(spf, deviceid, "ProductClass");\r
+ if (productClass == null) {\r
+ productClass = "";\r
+ }\r
+ maxEnvelopes = Integer.parseInt(getRequestElement(spf, body, "MaxEnvelopes"));\r
+ retryCount = Integer.parseInt(getRequestElement(spf, body, "RetryCount"));\r
+ currentTime = getRequestElement(spf, body, "CurrentTime");\r
+\r
+ Iterator<SOAPElement> pi = getRequestChildElement(spf, body, "ParameterList")\r
+ .getChildElements(spf.createName("ParameterValueStruct"));\r
+ Name nameKey = spf.createName("Name");\r
+ Name nameValue = spf.createName("Value");\r
+ params = new HashMap<>();\r
+ while (pi.hasNext()) {\r
+ SOAPElement param = pi.next();\r
+ String key = getRequestElement(param, nameKey);\r
+ if (root == null && !key.startsWith(".")) {\r
+ if (key.startsWith("Device.")) {\r
+ root = "Device";\r
+ } else {\r
+ root = "InternetGatewayDevice";\r
+ }\r
+ }\r
+ String value = "";\r
+ try {\r
+ value = getRequestElement(param, nameValue);\r
+ value = setEmptyValueIfNull(value);\r
+ } catch (Exception e) {\r
+ logger.error("Exception while Inform parseBody. {}", e.toString());\r
+ }\r
+ params.put(key, value);\r
+ }\r
+\r
+ if (root == null) {\r
+ throw new SOAPException("Invalid root. Must be InternetGatewayDevice or Device");\r
+ }\r
+\r
+ pi = getRequestChildElement(spf, body, "Event").getChildElements(spf.createName("EventStruct"));\r
+ Name eventCode = spf.createName("EventCode");\r
+ Name commandKey = spf.createName(COMMAND_KEY);\r
+ events = new LinkedHashSet<>();\r
+ while (pi.hasNext()) {\r
+ SOAPElement param = pi.next();\r
+ String event = getRequestElement(param, eventCode);\r
+ String cmdKey = getRequestElement(param, commandKey);\r
+ cmdKey = setEmptyValueIfNull(cmdKey);\r
+ events.add(new Event(event, cmdKey));\r
+ }\r
+\r
+ }\r
+\r
+ private String setEmptyValueIfNull(String value) {\r
+ if (value == null)\r
+ value = "";\r
+\r
+ return value;\r
+ }\r
+\r
+ public String getSoftwareVersion() {\r
+ String v = params.get(root + ".DeviceInfo.SoftwareVersion");\r
+ if (v != null) {\r
+ v = v.replace('-', '.');\r
+ v = v.replace(',', ' ');\r
+ }\r
+ return v;\r
+ }\r
+\r
+ public String getHardwareVersion() {\r
+ return params.get(root + ".DeviceInfo.HardwareVersion");\r
+ }\r
+\r
+ public String getConfigVersion() {\r
+ return params.get(root + ".DeviceInfo.VendorConfigFile.1.Version");\r
+ }\r
+\r
+ public String getURL() {\r
+ String url = params.get(root + ".ManagementServer.ConnectionRequestURL");\r
+ if (url != null) {\r
+ return url;\r
+ }\r
+ url = params.get(root + ".ManagementServer.UDPConnectionRequestAddress");\r
+ if (url != null) {\r
+ url = (url.indexOf(':') == -1) ? "udp://" + url + ":80" : "udp://" + url;\r
+ }\r
+ return url;\r
+ }\r
+\r
+ public String getConreqUser() {\r
+ return params.get(root + ".ManagementServer.ConnectionRequestUsername");\r
+ }\r
+\r
+ public String getConreqPass() {\r
+ return params.get(root + ".ManagementServer.ConnectionRequestPassword");\r
+ }\r
+\r
+ public String getProvisiongCode() {\r
+ return params.get(root + ".DeviceInfo.ProvisioningCode");\r
+ }\r
+\r
+ public void setProvisiongCode(String code) {\r
+ params.put(root + ".DeviceInfo.ProvisioningCode", code);\r
+ }\r
+\r
+ public String getRoot() {\r
+ return root;\r
+ }\r
+\r
+ public boolean isEvent(String event) {\r
+ for (Entry<String, String> e : events) {\r
+ if (e.getKey().equals(event)) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ StringBuilder s = new StringBuilder(1024);\r
+ s.append("Inform:\n");\r
+ println(s, "\toui: ", oui);\r
+ println(s, "\tsn: ", sn);\r
+ println(s, "\tManufacturer: ", manufacturer);\r
+\r
+ s.append("\tEvents:\n");\r
+ for (Entry<String, String> ev : events) {\r
+ println(s, "\t\t", ev.getKey(), ev.getValue());\r
+ }\r
+\r
+ s.append("\tParams:\n");\r
+ for (Entry<String, String> k : params.entrySet()) {\r
+ println(s, "\t\t", k.getKey(), k.getValue());\r
+ }\r
+ return s.toString();\r
+ }\r
+\r
+ private String oui;\r
+ private String sn;\r
+ private String productClass;\r
+ private String manufacturer;\r
+ private int retryCount;\r
+ private String currentTime;\r
+ private Map<String, String> params;\r
+ private transient Set<Entry<String, String>> events;\r
+ private transient Set<Entry<String, String>> response;\r
+ private int maxEnvelopes;\r
+ private String defns;\r
+ private String root = null;\r
+ public static final String EVENT_BOOT_STRAP = "0 BOOTSTRAP";\r
+ public static final String EVENT_BOOT = "1 BOOT";\r
+ public static final String EVENT_PERIODIC = "2 PERIODIC";\r
+ public static final String EVENT_SCHEDULED = "3 SCHEDULED";\r
+ public static final String EVENT_VALUE_CHANGE = "4 VALUE CHANGE";\r
+ public static final String EVENT_KICKED = "5 KICKED";\r
+ public static final String EVENT_CONNECTION_REQUEST = "6 CONNECTION REQUEST";\r
+ public static final String EVENT_TRANSFER_COMPLETE = "7 TRANSFER COMPLETE";\r
+\r
+ public String getOui() {\r
+ return oui;\r
+ }\r
+\r
+ public void setOui(String oui) {\r
+ this.oui = oui;\r
+ }\r
+\r
+ public String getSn() {\r
+ return sn;\r
+ }\r
+\r
+ public void setSn(String sn) {\r
+ this.sn = sn;\r
+ }\r
+\r
+ public String getProductClass() {\r
+ return productClass;\r
+ }\r
+\r
+ public void setProductClass(String productClass) {\r
+ this.productClass = productClass;\r
+ }\r
+\r
+ public String getManufacturer() {\r
+ return manufacturer;\r
+ }\r
+\r
+ public void setManufacturer(String manufacturer) {\r
+ this.manufacturer = manufacturer;\r
+ }\r
+\r
+ public int getRetryCount() {\r
+ return retryCount;\r
+ }\r
+\r
+ public void setRetryCount(int retryCount) {\r
+ this.retryCount = retryCount;\r
+ }\r
+\r
+ public String getCurrentTime() {\r
+ return currentTime;\r
+ }\r
+\r
+ public void setCurrentTime(String currentTime) {\r
+ this.currentTime = currentTime;\r
+ }\r
+\r
+ public Map<String, String> getParams() {\r
+ return params;\r
+ }\r
+\r
+ public void setParams(Map<String, String> params) {\r
+ this.params = params;\r
+ }\r
+\r
+ public Set<Entry<String, String>> getResponse() {\r
+ return response;\r
+ }\r
+\r
+ public void setResponse(Set<Entry<String, String>> response) {\r
+ this.response = response;\r
+ }\r
+\r
+ public int getMaxEnvelopes() {\r
+ return maxEnvelopes;\r
+ }\r
+\r
+ public void setMaxEnvelopes(int maxEnvelopes) {\r
+ this.maxEnvelopes = maxEnvelopes;\r
+ }\r
+\r
+ public Set<Entry<String, String>> getEvents() {\r
+ return events;\r
+ }\r
+\r
+ public void setEvents(Set<Entry<String, String>> events) {\r
+ this.events = events;\r
+ }\r
+\r
+ public String getDefns() {\r
+ return defns;\r
+ }\r
+\r
+ public void setDefns(String defns) {\r
+ this.defns = defns;\r
+ }\r
+}\r