Device Software version management
[oam/tr069-adapter.git] / config-data / src / main / java / org / commscope / tr069adapter / config / service / ConfigurationDataService.java
index 0987cde..0ce8aef 100644 (file)
 package org.commscope.tr069adapter.config.service;\r
 \r
 import java.nio.charset.StandardCharsets;\r
+import java.util.List;\r
+import java.util.Map.Entry;\r
 import java.util.Optional;\r
-\r
+import java.util.TreeMap;\r
 import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;\r
 import org.commscope.tr069adapter.config.constants.Utility;\r
 import org.commscope.tr069adapter.config.exceptions.InvalidConfigurationServiceException;\r
@@ -56,14 +58,29 @@ public class ConfigurationDataService {
     return configDataRepository.findById(macId);\r
   }\r
 \r
-  public Optional<ConfigurationData> getConfigurationData(String macId)\r
-      throws InvalidConfigurationServiceException {\r
+  public Optional<ConfigurationData> getConfigurationData(String macId, String swVersion,\r
+      String hwVersion) throws InvalidConfigurationServiceException {\r
     ConfigurationData configurationData = null;\r
-    Optional<ConfigFileContent> configFileContent = configDataRepository.findById(macId);\r
-\r
-    if (configFileContent.isPresent()) {\r
+    List<ConfigFileContent> configFileContentList = configDataRepository.findByMacId(macId);\r
+    TreeMap<DeviceVersion, ConfigurationData> configDataMap = new TreeMap<>();\r
+    if (!configFileContentList.isEmpty()) {\r
       logger.debug("Parsing configuration file for device {}", macId);\r
-      configurationData = configurationXMLDataParser.parseFile(configFileContent.get());\r
+      for (ConfigFileContent configFileContent : configFileContentList) {\r
+        ConfigurationData cfgData = configurationXMLDataParser.parseFile(configFileContent);\r
+        DeviceVersion dVersion =\r
+            new DeviceVersion(cfgData.getSoftwareVersion(), cfgData.getHardwareVersion());\r
+        configDataMap.put(dVersion, cfgData);\r
+      }\r
+      DeviceVersion inputVersion = new DeviceVersion(swVersion, hwVersion);\r
+      Entry<DeviceVersion, ConfigurationData> floorEntry = configDataMap.floorEntry(inputVersion);\r
+\r
+      if (null == floorEntry) {\r
+        logger.error("Configuration file is not available for device {}", macId);\r
+        return Optional.ofNullable(configurationData);\r
+      }\r
+\r
+      DeviceVersion floor = floorEntry.getKey();\r
+      configurationData = configDataMap.get(floor);\r
       logger.debug("Parsing of device configuration file is completed");\r
     } else {\r
       logger.error("Configuration file is not available for device {}", macId);\r
@@ -102,10 +119,120 @@ public class ConfigurationDataService {
 \r
     configurationXMLDataParser.validateFile(configFileContent);\r
 \r
+    ConfigurationData configurationData = configurationXMLDataParser.parseFile(configFileContent);\r
+    configFileContent.setSwVersion(configurationData.getSoftwareVersion());\r
+    configFileContent.setHwVersion(configurationData.getHardwareVersion());\r
+\r
     logger.debug("Saving configuration file {} content for device of macId {}", fileName,\r
         Utility.getMacId(fileName));\r
-    saveConfigFileContent(configFileContent);\r
+    ConfigFileContent configFileContentEntity =\r
+        configDataRepository.findByMacIdAndSwVersionAndHwVersion(configFileContent.getMacId(),\r
+            configFileContent.getSwVersion(), configFileContent.getHwVersion());\r
+\r
+    if (configFileContentEntity != null) {\r
+      configFileContentEntity.setFileContent(configFileContent.getFileContent());\r
+      saveConfigFileContent(configFileContentEntity);\r
+    } else {\r
+      saveConfigFileContent(configFileContent);\r
+    }\r
+\r
     logger.debug("Configuration file content saved successfully");\r
   }\r
 \r
+  class DeviceVersion implements Comparable<DeviceVersion> {\r
+    private static final long serialVersionUID = -7251276716604249440L;\r
+    private int svMajorVersion = 0;\r
+    private int svMinorVersion = 0;\r
+    private int svPatchVersion = 0;\r
+    private boolean isGenericVersion = false;\r
+\r
+    public DeviceVersion(String swVersion, String hwVersion) {\r
+      super();\r
+      setSwVersion(swVersion);\r
+      this.hwVersion = hwVersion;\r
+    }\r
+\r
+    public String getSwVersion() {\r
+      return svMajorVersion + "." + svMinorVersion + "." + svPatchVersion;\r
+    }\r
+\r
+    public void setSwVersion(String swVersion) {\r
+      // TODO: conversion to integers\r
+\r
+      if (swVersion.indexOf(".") > 0) {\r
+        String[] verArray = swVersion.split("\\.");\r
+\r
+\r
+        for (int i = 0; i < verArray.length; i++) {\r
+\r
+          if (verArray[i].equals("*")) {\r
+            verArray[i] = "0";\r
+          }\r
+        }\r
+        svMajorVersion = Integer.parseInt(verArray[0]);\r
+        svMinorVersion = Integer.parseInt(verArray[1]);\r
+        svPatchVersion = Integer.parseInt(verArray[2]);\r
+\r
+      } else if (swVersion.indexOf("x") > 0) {\r
+        swVersion = "*";\r
+      } else if (swVersion.equals("*")) {\r
+        isGenericVersion = true;\r
+      }\r
+    }\r
+\r
+    public String getHwVersion() {\r
+      return hwVersion;\r
+    }\r
+\r
+    public void setHwVersion(String hwVersion) {\r
+      this.hwVersion = hwVersion;\r
+    }\r
+\r
+    private String hwVersion;\r
+\r
+    public int getSvMajorVersion() {\r
+      return svMajorVersion;\r
+    }\r
+\r
+    public void setSvMajorVersion(int svMajorVersion) {\r
+      this.svMajorVersion = svMajorVersion;\r
+    }\r
+\r
+    public int getSvMinorVersion() {\r
+      return svMinorVersion;\r
+    }\r
+\r
+    public void setSvMinorVersion(int svMinorVersion) {\r
+      this.svMinorVersion = svMinorVersion;\r
+    }\r
+\r
+    public int getSvPatchVersion() {\r
+      return svPatchVersion;\r
+    }\r
+\r
+    public void setSvPatchVersion(int svPatchVersion) {\r
+      this.svPatchVersion = svPatchVersion;\r
+    }\r
+\r
+    public boolean isGenericVersion() {\r
+      return isGenericVersion;\r
+    }\r
+\r
+    public void setGenericVersion(boolean isGenericVersion) {\r
+      this.isGenericVersion = isGenericVersion;\r
+    }\r
+\r
+    @Override\r
+    public int compareTo(DeviceVersion o) {\r
+\r
+      if (svMajorVersion != o.svMajorVersion) {\r
+        return (svMajorVersion - o.svMajorVersion);\r
+      } else if (svMinorVersion != o.svMinorVersion) {\r
+        return svMinorVersion - o.svMinorVersion;\r
+      } else {\r
+        return svPatchVersion - o.svPatchVersion;\r
+      }\r
+    }\r
+  }\r
+\r
 }\r