df4d068db566dee86b7568d76f8d4777b77c2159
[oam/tr069-adapter.git] / common / src / main / java / org / commscope / tr069adapter / common / deviceversion / DeviceVersion.java
1 /*\r
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
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\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
17  */\r
18 \r
19 package org.commscope.tr069adapter.common.deviceversion;\r
20 \r
21 import java.io.Serializable;\r
22 import java.util.Comparator;\r
23 \r
24 public class DeviceVersion implements Serializable, Comparable<DeviceVersion> {\r
25 \r
26   /**\r
27    * \r
28    */\r
29   private static final long serialVersionUID = -7251276716604249440L;\r
30   private int svMajorVersion = 0;\r
31   private int svMinorVersion = 0;\r
32   private int svPatchVersion = 0;\r
33   private String swVersion;\r
34   private boolean isGenericVersion = false;\r
35   private boolean isHwRegex = false;\r
36   private boolean isSwRegex = false;\r
37 \r
38   public DeviceVersion(String swVersion, String hwVersion) {\r
39     super();\r
40     setSwVersion(swVersion);\r
41     this.hwVersion = hwVersion;\r
42   }\r
43 \r
44   public DeviceVersion(String swVersion, String hwVersion, boolean isSwRegex,\r
45       boolean isHwRegex) {\r
46     super();\r
47     this.hwVersion = hwVersion;\r
48     this.swVersion = swVersion;\r
49     this.isHwRegex = isHwRegex;\r
50     this.isSwRegex = isSwRegex;\r
51     if (!isSwRegex) {\r
52       setSwVersion(swVersion);\r
53     }\r
54   }\r
55 \r
56   public String getSwVersion() {\r
57     if (!isSwRegex)\r
58       return svMajorVersion + "." + svMinorVersion + "." + svPatchVersion;\r
59     else\r
60       return this.swVersion;\r
61   }\r
62 \r
63   public boolean isHwRegex() {\r
64     return isHwRegex;\r
65   }\r
66 \r
67   public boolean isSwRegex() {\r
68     return isSwRegex;\r
69   }\r
70 \r
71   private void setSwVersion(String swVersion) {\r
72     if (swVersion.indexOf(".") > 0) {\r
73       String[] verArray = swVersion.split("\\.");\r
74 \r
75       for (int i = 0; i < verArray.length; i++) {\r
76 \r
77         if (verArray[i].equals("*")) {\r
78           verArray[i] = "0";\r
79         }\r
80       }\r
81       try {\r
82         svMajorVersion = Integer.parseInt(verArray[0]);\r
83         svMinorVersion = Integer.parseInt(verArray[1]);\r
84         svPatchVersion = Integer.parseInt(verArray[2]);\r
85       } catch (Exception e) {\r
86         // TODO: handle exception\r
87       }\r
88 \r
89     } else if (swVersion.indexOf("x") > 0) {\r
90       swVersion = "*";\r
91     } else if (swVersion.equals("*")) {\r
92       isGenericVersion = true;\r
93     }\r
94 \r
95   }\r
96 \r
97   public String getHwVersion() {\r
98     return hwVersion;\r
99   }\r
100 \r
101   private String hwVersion;\r
102 \r
103   public int getSvMajorVersion() {\r
104     return svMajorVersion;\r
105   }\r
106 \r
107   public int getSvMinorVersion() {\r
108     return svMinorVersion;\r
109   }\r
110 \r
111   public int getSvPatchVersion() {\r
112     return svPatchVersion;\r
113   }\r
114 \r
115   private long deviceTypeId;\r
116 \r
117   public long getDeviceTypeId() {\r
118     return deviceTypeId;\r
119   }\r
120 \r
121   public boolean isGenericVersion() {\r
122     return isGenericVersion;\r
123   }\r
124 \r
125   public static Comparator<DeviceVersion> softwareComparator = new Comparator<DeviceVersion>() {\r
126     @Override\r
127     public int compare(DeviceVersion d1, DeviceVersion d2) {\r
128       if (d1.getSvMajorVersion() != d2.getSvMajorVersion()) {\r
129         return (d1.getSvMajorVersion() - d2.getSvMajorVersion());\r
130       } else if (d1.getSvMinorVersion() != d2.getSvMinorVersion()) {\r
131         return d1.getSvMinorVersion() - d2.getSvMinorVersion();\r
132       } else\r
133         return d1.getSvPatchVersion() - d2.getSvPatchVersion();\r
134     }\r
135   };\r
136 \r
137   @Override\r
138   public int compareTo(DeviceVersion o) {\r
139     if (deviceTypeId != o.deviceTypeId)\r
140       return -1;\r
141 \r
142     if (isSwRegex) {\r
143       return this.hashCode() - o.hashCode();\r
144     } else {\r
145       if (svMajorVersion != o.svMajorVersion) {\r
146         return (svMajorVersion - o.svMajorVersion);\r
147       } else if (svMinorVersion != o.svMinorVersion) {\r
148         return svMinorVersion - o.svMinorVersion;\r
149       } else if (svPatchVersion != o.svPatchVersion) {\r
150         return svPatchVersion - o.svPatchVersion;\r
151       } else {\r
152         return hwVersion.compareToIgnoreCase(o.hwVersion);\r
153       }\r
154     }\r
155   }\r
156 \r
157   @Override\r
158   public int hashCode() {\r
159     final int prime = 31;\r
160     int result = 1;\r
161     result = prime * result + (int) (deviceTypeId ^ (deviceTypeId >>> 32));\r
162     result = prime * result + ((hwVersion == null) ? 0 : hwVersion.hashCode());\r
163     result = prime * result + (isGenericVersion ? 1231 : 1237);\r
164     result = prime * result + (isHwRegex ? 1231 : 1237);\r
165     result = prime * result + (isSwRegex ? 1241 : 1247);\r
166     result = prime * result + svMajorVersion;\r
167     result = prime * result + svMinorVersion;\r
168     result = prime * result + svPatchVersion;\r
169     return result;\r
170   }\r
171 }\r