-/*\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.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
-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
-import org.commscope.tr069adapter.config.model.ConfigFileContent;\r
-import org.commscope.tr069adapter.config.parser.ConfigurationXMLDataParser;\r
-import org.commscope.tr069adapter.config.repository.ConfigurationDataRepository;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.stereotype.Service;\r
-import org.springframework.util.StringUtils;\r
-import org.springframework.web.multipart.MultipartFile;\r
-\r
-@Service\r
-public class ConfigurationDataService {\r
- private final Logger logger = LoggerFactory.getLogger(this.getClass());\r
-\r
- @Autowired\r
- ConfigurationDataRepository configDataRepository;\r
-\r
- @Autowired\r
- ConfigurationXMLDataParser configurationXMLDataParser;\r
-\r
- public void saveConfigFileContent(ConfigFileContent configFileContent) {\r
- configDataRepository.save(configFileContent);\r
- }\r
-\r
- public Iterable<ConfigFileContent> getAllConfigFileContent() {\r
- return configDataRepository.findAll();\r
- }\r
-\r
- public Optional<ConfigFileContent> getConfigFileContent(String macId) {\r
- return configDataRepository.findById(macId);\r
- }\r
-\r
- public Optional<ConfigurationData> getConfigurationData(String macId, String swVersion,\r
- String hwVersion) throws InvalidConfigurationServiceException {\r
- ConfigurationData configurationData = null;\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
- 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
- return Optional.ofNullable(configurationData);\r
- }\r
- return Optional.ofNullable(configurationData);\r
- }\r
-\r
- public void saveConfigFileContents(MultipartFile file)\r
- throws InvalidConfigurationServiceException {\r
- String fileName = StringUtils.cleanPath(file.getOriginalFilename());\r
-\r
- if (fileName.contains("..")) {\r
- throw new InvalidConfigurationServiceException(\r
- "Filename contains invalid path sequence " + fileName);\r
- }\r
-\r
- ConfigFileContent configFileContent = new ConfigFileContent();\r
-\r
- try {\r
- configFileContent.setFileContent(new String(file.getBytes(), StandardCharsets.UTF_8));\r
- configFileContent.setMacId(Utility.getMacId(fileName));\r
-\r
- if (!configFileContent.getFileContent().contains("<configDataFile>")) {\r
- logger.error(\r
- "File {} is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"",\r
- fileName);\r
- throw new InvalidConfigurationServiceException(\r
- "File is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"");\r
- }\r
-\r
- } catch (Exception e) {\r
- throw new InvalidConfigurationServiceException(\r
- "Error occurred while reading file content. Reason: " + e.getMessage());\r
- }\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
- 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
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : tr-069-adapter
+ * =================================================================================================
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.
+ * =================================================================================================
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
+ * may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ===============LICENSE_END=======================================================================
+ */
+
+package org.commscope.tr069adapter.config.service;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.TreeMap;
+
+import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;
+import org.commscope.tr069adapter.config.constants.Utility;
+import org.commscope.tr069adapter.config.exceptions.InvalidConfigurationServiceException;
+import org.commscope.tr069adapter.config.model.ConfigFileContent;
+import org.commscope.tr069adapter.config.parser.ConfigurationXMLDataParser;
+import org.commscope.tr069adapter.config.repository.ConfigurationDataRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+@Service
+public class ConfigurationDataService {
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ @Autowired
+ ConfigurationDataRepository configDataRepository;
+
+ @Autowired
+ ConfigurationXMLDataParser configurationXMLDataParser;
+
+ public void saveConfigFileContent(ConfigFileContent configFileContent) {
+ configDataRepository.save(configFileContent);
+ }
+
+ public Iterable<ConfigFileContent> getAllConfigFileContent() {
+ return configDataRepository.findAll();
+ }
+
+ public Optional<ConfigFileContent> getConfigFileContent(String macId) {
+ return configDataRepository.findById(macId);
+ }
+
+ public Optional<ConfigurationData> getConfigurationData(String macId, String swVersion,
+ String hwVersion) throws InvalidConfigurationServiceException {
+ ConfigurationData configurationData = null;
+ List<ConfigFileContent> configFileContentList = configDataRepository.findByMacId(macId);
+ TreeMap<DeviceVersion, ConfigurationData> configDataMap = new TreeMap<>();
+ if (!configFileContentList.isEmpty()) {
+ logger.debug("Parsing configuration file for device {}", macId);
+ for (ConfigFileContent configFileContent : configFileContentList) {
+ ConfigurationData cfgData = configurationXMLDataParser.parseFile(configFileContent);
+ DeviceVersion dVersion =
+ new DeviceVersion(cfgData.getSoftwareVersion(), cfgData.getHardwareVersion());
+ configDataMap.put(dVersion, cfgData);
+ }
+ DeviceVersion inputVersion = new DeviceVersion(swVersion, hwVersion);
+ Entry<DeviceVersion, ConfigurationData> floorEntry = configDataMap.floorEntry(inputVersion);
+
+ if (null == floorEntry) {
+ macId = macId.replaceAll("[\n|\r|\t]", "_");
+ logger.error("Configuration file is not available for device {}", macId);
+ return Optional.ofNullable(configurationData);
+ }
+
+ DeviceVersion floor = floorEntry.getKey();
+ configurationData = configDataMap.get(floor);
+ logger.debug("Parsing of device configuration file is completed");
+ } else {
+ macId = macId.replaceAll("[\n|\r|\t]", "_");
+ logger.error("Configuration file is not available for device {}", macId);
+ return Optional.ofNullable(configurationData);
+ }
+ return Optional.ofNullable(configurationData);
+ }
+
+ public void saveConfigFileContents(MultipartFile file)
+ throws InvalidConfigurationServiceException {
+ String fileName = StringUtils.cleanPath(file.getOriginalFilename());
+
+ if (fileName.contains("..")) {
+ throw new InvalidConfigurationServiceException(
+ "Filename contains invalid path sequence " + fileName);
+ }
+
+ ConfigFileContent configFileContent = new ConfigFileContent();
+
+ try {
+ configFileContent.setFileContent(new String(file.getBytes(), StandardCharsets.UTF_8));
+ configFileContent.setMacId(Utility.getMacId(fileName));
+
+ if (!configFileContent.getFileContent().contains("<configDataFile>")) {
+ logger.error(
+ "File {} is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"",
+ fileName);
+ throw new InvalidConfigurationServiceException(
+ "File is not a valid configuration file as it doesn't contain tag \"<configDataFile>\"");
+ }
+
+ } catch (Exception e) {
+ throw new InvalidConfigurationServiceException(
+ "Error occurred while reading file content. Reason: " + e.getMessage());
+ }
+
+ configurationXMLDataParser.validateFile(configFileContent);
+
+ ConfigurationData configurationData = configurationXMLDataParser.parseFile(configFileContent);
+ configFileContent.setSwVersion(configurationData.getSoftwareVersion());
+ configFileContent.setHwVersion(configurationData.getHardwareVersion());
+
+ logger.debug("Saving configuration file {} content for device of macId {}", fileName,
+ Utility.getMacId(fileName));
+ ConfigFileContent configFileContentEntity =
+ configDataRepository.findByMacIdAndSwVersionAndHwVersion(configFileContent.getMacId(),
+ configFileContent.getSwVersion(), configFileContent.getHwVersion());
+
+ if (configFileContentEntity != null) {
+ configFileContentEntity.setFileContent(configFileContent.getFileContent());
+ saveConfigFileContent(configFileContentEntity);
+ } else {
+ saveConfigFileContent(configFileContent);
+ }
+
+ logger.debug("Configuration file content saved successfully");
+ }
+
+ class DeviceVersion implements Comparable<DeviceVersion> {
+ private static final long serialVersionUID = -7251276716604249440L;
+ private int svMajorVersion = 0;
+ private int svMinorVersion = 0;
+ private int svPatchVersion = 0;
+ private boolean isGenericVersion = false;
+
+ public DeviceVersion(String swVersion, String hwVersion) {
+ super();
+ setSwVersion(swVersion);
+ this.hwVersion = hwVersion;
+ }
+
+ public String getSwVersion() {
+ return svMajorVersion + "." + svMinorVersion + "." + svPatchVersion;
+ }
+
+ public void setSwVersion(String swVersion) {
+ // TODO: conversion to integers
+
+ if (swVersion.indexOf(".") > 0) {
+ String[] verArray = swVersion.split("\\.");
+
+
+ for (int i = 0; i < verArray.length; i++) {
+
+ if (verArray[i].equals("*")) {
+ verArray[i] = "0";
+ }
+ }
+ svMajorVersion = Integer.parseInt(verArray[0]);
+ svMinorVersion = Integer.parseInt(verArray[1]);
+ svPatchVersion = Integer.parseInt(verArray[2]);
+
+ } else if (swVersion.indexOf("x") > 0) {
+ swVersion = "*";
+ } else if (swVersion.equals("*")) {
+ isGenericVersion = true;
+ }
+ }
+
+ public String getHwVersion() {
+ return hwVersion;
+ }
+
+ public void setHwVersion(String hwVersion) {
+ this.hwVersion = hwVersion;
+ }
+
+ private String hwVersion;
+
+ public int getSvMajorVersion() {
+ return svMajorVersion;
+ }
+
+ public void setSvMajorVersion(int svMajorVersion) {
+ this.svMajorVersion = svMajorVersion;
+ }
+
+ public int getSvMinorVersion() {
+ return svMinorVersion;
+ }
+
+ public void setSvMinorVersion(int svMinorVersion) {
+ this.svMinorVersion = svMinorVersion;
+ }
+
+ public int getSvPatchVersion() {
+ return svPatchVersion;
+ }
+
+ public void setSvPatchVersion(int svPatchVersion) {
+ this.svPatchVersion = svPatchVersion;
+ }
+
+ public boolean isGenericVersion() {
+ return isGenericVersion;
+ }
+
+ public void setGenericVersion(boolean isGenericVersion) {
+ this.isGenericVersion = isGenericVersion;
+ }
+
+ @Override
+ public int compareTo(DeviceVersion o) {
+
+ if (svMajorVersion != o.svMajorVersion) {
+ return (svMajorVersion - o.svMajorVersion);
+ } else if (svMinorVersion != o.svMinorVersion) {
+ return svMinorVersion - o.svMinorVersion;
+ } else {
+ return svPatchVersion - o.svPatchVersion;
+ }
+ }
+ }
+
+}