Device Software version management
[oam/tr069-adapter.git] / common / src / main / java / org / commscope / tr069adapter / common / deviceversion / DeviceVersion.java
diff --git a/common/src/main/java/org/commscope/tr069adapter/common/deviceversion/DeviceVersion.java b/common/src/main/java/org/commscope/tr069adapter/common/deviceversion/DeviceVersion.java
new file mode 100644 (file)
index 0000000..df4d068
--- /dev/null
@@ -0,0 +1,171 @@
+/*\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.common.deviceversion;\r
+\r
+import java.io.Serializable;\r
+import java.util.Comparator;\r
+\r
+public class DeviceVersion implements Serializable, Comparable<DeviceVersion> {\r
+\r
+  /**\r
+   * \r
+   */\r
+  private static final long serialVersionUID = -7251276716604249440L;\r
+  private int svMajorVersion = 0;\r
+  private int svMinorVersion = 0;\r
+  private int svPatchVersion = 0;\r
+  private String swVersion;\r
+  private boolean isGenericVersion = false;\r
+  private boolean isHwRegex = false;\r
+  private boolean isSwRegex = false;\r
+\r
+  public DeviceVersion(String swVersion, String hwVersion) {\r
+    super();\r
+    setSwVersion(swVersion);\r
+    this.hwVersion = hwVersion;\r
+  }\r
+\r
+  public DeviceVersion(String swVersion, String hwVersion, boolean isSwRegex,\r
+      boolean isHwRegex) {\r
+    super();\r
+    this.hwVersion = hwVersion;\r
+    this.swVersion = swVersion;\r
+    this.isHwRegex = isHwRegex;\r
+    this.isSwRegex = isSwRegex;\r
+    if (!isSwRegex) {\r
+      setSwVersion(swVersion);\r
+    }\r
+  }\r
+\r
+  public String getSwVersion() {\r
+    if (!isSwRegex)\r
+      return svMajorVersion + "." + svMinorVersion + "." + svPatchVersion;\r
+    else\r
+      return this.swVersion;\r
+  }\r
+\r
+  public boolean isHwRegex() {\r
+    return isHwRegex;\r
+  }\r
+\r
+  public boolean isSwRegex() {\r
+    return isSwRegex;\r
+  }\r
+\r
+  private void setSwVersion(String swVersion) {\r
+    if (swVersion.indexOf(".") > 0) {\r
+      String[] verArray = swVersion.split("\\.");\r
+\r
+      for (int i = 0; i < verArray.length; i++) {\r
+\r
+        if (verArray[i].equals("*")) {\r
+          verArray[i] = "0";\r
+        }\r
+      }\r
+      try {\r
+        svMajorVersion = Integer.parseInt(verArray[0]);\r
+        svMinorVersion = Integer.parseInt(verArray[1]);\r
+        svPatchVersion = Integer.parseInt(verArray[2]);\r
+      } catch (Exception e) {\r
+        // TODO: handle exception\r
+      }\r
+\r
+    } else if (swVersion.indexOf("x") > 0) {\r
+      swVersion = "*";\r
+    } else if (swVersion.equals("*")) {\r
+      isGenericVersion = true;\r
+    }\r
+\r
+  }\r
+\r
+  public String getHwVersion() {\r
+    return hwVersion;\r
+  }\r
+\r
+  private String hwVersion;\r
+\r
+  public int getSvMajorVersion() {\r
+    return svMajorVersion;\r
+  }\r
+\r
+  public int getSvMinorVersion() {\r
+    return svMinorVersion;\r
+  }\r
+\r
+  public int getSvPatchVersion() {\r
+    return svPatchVersion;\r
+  }\r
+\r
+  private long deviceTypeId;\r
+\r
+  public long getDeviceTypeId() {\r
+    return deviceTypeId;\r
+  }\r
+\r
+  public boolean isGenericVersion() {\r
+    return isGenericVersion;\r
+  }\r
+\r
+  public static Comparator<DeviceVersion> softwareComparator = new Comparator<DeviceVersion>() {\r
+    @Override\r
+    public int compare(DeviceVersion d1, DeviceVersion d2) {\r
+      if (d1.getSvMajorVersion() != d2.getSvMajorVersion()) {\r
+        return (d1.getSvMajorVersion() - d2.getSvMajorVersion());\r
+      } else if (d1.getSvMinorVersion() != d2.getSvMinorVersion()) {\r
+        return d1.getSvMinorVersion() - d2.getSvMinorVersion();\r
+      } else\r
+        return d1.getSvPatchVersion() - d2.getSvPatchVersion();\r
+    }\r
+  };\r
+\r
+  @Override\r
+  public int compareTo(DeviceVersion o) {\r
+    if (deviceTypeId != o.deviceTypeId)\r
+      return -1;\r
+\r
+    if (isSwRegex) {\r
+      return this.hashCode() - o.hashCode();\r
+    } else {\r
+      if (svMajorVersion != o.svMajorVersion) {\r
+        return (svMajorVersion - o.svMajorVersion);\r
+      } else if (svMinorVersion != o.svMinorVersion) {\r
+        return svMinorVersion - o.svMinorVersion;\r
+      } else if (svPatchVersion != o.svPatchVersion) {\r
+        return svPatchVersion - o.svPatchVersion;\r
+      } else {\r
+        return hwVersion.compareToIgnoreCase(o.hwVersion);\r
+      }\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public int hashCode() {\r
+    final int prime = 31;\r
+    int result = 1;\r
+    result = prime * result + (int) (deviceTypeId ^ (deviceTypeId >>> 32));\r
+    result = prime * result + ((hwVersion == null) ? 0 : hwVersion.hashCode());\r
+    result = prime * result + (isGenericVersion ? 1231 : 1237);\r
+    result = prime * result + (isHwRegex ? 1231 : 1237);\r
+    result = prime * result + (isSwRegex ? 1241 : 1247);\r
+    result = prime * result + svMajorVersion;\r
+    result = prime * result + svMinorVersion;\r
+    result = prime * result + svPatchVersion;\r
+    return result;\r
+  }\r
+}\r