Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / config-data / src / main / java / org / commscope / tr069adapter / config / service / ConfigurationDataService.java
index 0ce8aef..49225a7 100644 (file)
-/*\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;
+      }
+    }
+  }
+
+}