Initial source code
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / rpc / Inform.java
diff --git a/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Inform.java b/acs/cpe/src/main/java/org/commscope/tr069adapter/acs/cpe/rpc/Inform.java
new file mode 100644 (file)
index 0000000..fce3790
--- /dev/null
@@ -0,0 +1,320 @@
+/*\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