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
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
\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