Device Software version management
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / util / MOMetaDataUtil.java
index a038468..dcebc63 100644 (file)
@@ -28,14 +28,15 @@ import java.util.HashSet;
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
-\r
 import javax.annotation.PostConstruct;\r
-\r
 import org.apache.commons.io.FileUtils;\r
 import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
+import org.commscope.tr069adapter.common.deviceversion.DeviceVersionManager;\r
+import org.commscope.tr069adapter.common.deviceversion.ProfileDefinition;\r
 import org.commscope.tr069adapter.mapper.MOMetaData;\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Component;\r
 \r
 @Component\r
@@ -46,12 +47,16 @@ public class MOMetaDataUtil {
   private static final String GENERIC_INDEX_REGEX = "\\.\\{[i-l]\\}\\.";\r
   private static final String INDEX_REGEX = "\\.[0-9]{1,}\\.";\r
   private static final String MO_META_DATA_FILE_LOCATION = "mapper-schema";\r
-  private Map<String, MOMetaData> metaDataMap;\r
-  private Map<String, String> metaDataReverseMap;\r
+  private Map<String, Map<String, MOMetaData>> metaDataMap;\r
+  private Map<String, Map<String, String>> metaDataReverseMap;\r
   public static final String ORAN_SW_MGMT_URI = "urn:o-ran:software-management:1.0";\r
 \r
+  @Autowired\r
+  DeviceVersionManager versionManager;\r
+\r
   @PostConstruct\r
   public void loadMetaData() {\r
+\r
     try {\r
       LOG.info("Loading mapper schema");\r
       if (metaDataMap != null)\r
@@ -68,26 +73,33 @@ public class MOMetaDataUtil {
   private void getMetaDataAsMap(String fileLocation) throws IOException {\r
     metaDataMap = new HashMap<>();\r
     metaDataReverseMap = new HashMap<>();\r
-    Collection<File> files = FileUtils.listFiles(new File(fileLocation), null, false);\r
-\r
-    for (File file : files) {\r
-      LOG.info("Loading mapper schema from {}", file.getName());\r
-      List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);\r
-      for (String line : lines) {\r
-        if (line != null && line.startsWith("#")) {\r
-          continue;\r
-        }\r
-        if (line != null && line.split(",").length >= 3) {\r
-\r
-          parseMetaDataLine(line, metaDataMap, metaDataReverseMap);\r
 \r
+    List<ProfileDefinition> profiles = versionManager.getSupportedProfileDefinitions();\r
+    for (ProfileDefinition profileDefinition : profiles) {\r
+      Map<String, MOMetaData> profileMetaDataMap = new HashMap<>();\r
+      Map<String, String> profileMetaDataReverseMap = new HashMap<>();\r
+\r
+      Collection<File> files = FileUtils.listFiles(\r
+          new File(fileLocation + "/" + profileDefinition.getCsdmMappingPath()), null, false);\r
+      for (File file : files) {\r
+        LOG.info("Loading mapper schema from {}", file.getName());\r
+        List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);\r
+        for (String line : lines) {\r
+          if (line != null && line.startsWith("#")) {\r
+            continue;\r
+          }\r
+          if (line != null && line.split(",").length >= 3) {\r
+            parseMetaDataLine(line, profileMetaDataMap, profileMetaDataReverseMap);\r
+          }\r
         }\r
       }\r
+      metaDataMap.put(profileDefinition.getProfileId(), profileMetaDataMap);\r
+      metaDataReverseMap.put(profileDefinition.getProfileId(), profileMetaDataReverseMap);\r
     }\r
   }\r
 \r
-  private static void parseMetaDataLine(String line, Map<String, MOMetaData> metaDataMap,\r
-      Map<String, String> metaDataReverseMap) {\r
+  private static void parseMetaDataLine(String line, Map<String, MOMetaData> profileMetaDataMap,\r
+      Map<String, String> profileMetaDataReverseMap) {\r
     String[] split = line.split(",");\r
     boolean isReadOnly = false;\r
     boolean isTabluar = false;\r
@@ -101,12 +113,13 @@ public class MOMetaDataUtil {
     } else if ("TabularObject".equalsIgnoreCase(split[2])) {\r
       isTabObject = true;\r
     }\r
-    prepareMOMetaData(isReadOnly, isTabluar, split, isTabObject, metaDataMap, metaDataReverseMap);\r
+    prepareMOMetaData(isReadOnly, isTabluar, split, isTabObject, profileMetaDataMap,\r
+        profileMetaDataReverseMap);\r
   }\r
 \r
   private static void prepareMOMetaData(boolean isReadOnly, boolean isTabluar, String[] split,\r
-      boolean isTabObject, Map<String, MOMetaData> metaDataMap,\r
-      Map<String, String> metaDataReverseMap) {\r
+      boolean isTabObject, Map<String, MOMetaData> profileMetaDataMap,\r
+      Map<String, String> profileMetaDataReverseMap) {\r
     String dataType = "";\r
     if (split.length > 3) {\r
       dataType = split[3];\r
@@ -120,49 +133,55 @@ public class MOMetaDataUtil {
       if ((split.length > 4 && split[4] != null) && split[4].trim().length() > 0) {\r
         metaTabData.setURI(split[4]);\r
       }\r
-      metaDataMap.put(logMessage, metaTabData);\r
+      profileMetaDataMap.put(logMessage, metaTabData);\r
     }\r
     MOMetaData metaData = new MOMetaData(split[0], dataType, isReadOnly, isTabluar, isTabObject);\r
     if ((split.length > 4 && split[4] != null) && split[4].trim().length() > 0) {\r
       metaData.setURI(split[4]);\r
     }\r
-    metaDataMap.put(split[1], metaData);\r
-    metaDataReverseMap.put(split[0], split[1]);\r
+    profileMetaDataMap.put(split[1], metaData);\r
+    profileMetaDataReverseMap.put(split[0], split[1]);\r
   }\r
 \r
-  public MOMetaData getMetaDataByNetConfName(String moName) {\r
+  public MOMetaData getMetaDataByNetConfName(String moName, String swVersion, String hwVersion) {\r
     String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
-    return metaDataMap.get(moNameInGnrForm);\r
-  }\r
 \r
-  public MOMetaData getMetaDataByTR69Name(String moName) {\r
-    String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
-    String netconfMoName = metaDataReverseMap.get(moNameInGnrForm);\r
-    return metaDataMap.get(netconfMoName);\r
+    String profileId = versionManager.getAssociatedProfileId(swVersion, hwVersion);\r
+    Map<String, MOMetaData> metaData = metaDataMap.get(profileId);\r
+\r
+    return metaData.get(moNameInGnrForm);\r
   }\r
 \r
-  public String getNetconfNameByTR69Name(String moName) {\r
+  public MOMetaData getMetaDataByTR69Name(String moName, String swVersion, String hwVersion) {\r
     String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
-    return metaDataReverseMap.get(moNameInGnrForm);\r
+\r
+    String profileId = versionManager.getAssociatedProfileId(swVersion, hwVersion);\r
+    Map<String, String> profileReverseMetaData = metaDataReverseMap.get(profileId);\r
+    Map<String, MOMetaData> profileMetaData = metaDataMap.get(profileId);\r
+\r
+    String netconfMoName = profileReverseMetaData.get(moNameInGnrForm);\r
+    return profileMetaData.get(netconfMoName);\r
   }\r
 \r
-  public String getNetconfNameByTR69NameWithIndexes(String moName) {\r
+  public String getNetconfNameByTR69NameWithIndexes(String moName, String swVersion,\r
+      String hwVersion) {\r
     String moNameInGnrForm = moName.replaceAll(INDEX_REGEX, STRING_I);\r
-    String netConfNMoName = metaDataReverseMap.get(moNameInGnrForm);\r
+    String profileId = versionManager.getAssociatedProfileId(swVersion, hwVersion);\r
+    Map<String, String> reverseMetaData = metaDataReverseMap.get(profileId);\r
+    String netConfNMoName = reverseMetaData.get(moNameInGnrForm);\r
     return netConfNMoName != null ? getNetConfMOByReplacingIndexes(netConfNMoName, moName)\r
         : netConfNMoName;\r
   }\r
 \r
-  public Set<String> getAllMONames() {\r
-    return metaDataMap.keySet();\r
-  }\r
-\r
-  public List<ParameterDTO> getSupportedChildParameters(List<ParameterDTO> parameters) {\r
+  public List<ParameterDTO> getSupportedChildParameters(List<ParameterDTO> parameters,\r
+      String swVersion, String hwVersion) {\r
     List<ParameterDTO> result = new ArrayList<>();\r
     Set<MOMetaData> allMatchedChilds = new HashSet<>();\r
+    String profileId = versionManager.getAssociatedProfileId(swVersion, hwVersion);\r
+    Map<String, MOMetaData> profileMetaData = metaDataMap.get(profileId);\r
     for (ParameterDTO param : parameters) {\r
       String parentMONameInGnrc = param.getParamName().replaceAll(INDEX_REGEX, STRING_I);\r
-      MOMetaData moData = metaDataMap.get(parentMONameInGnrc);\r
+      MOMetaData moData = profileMetaData.get(parentMONameInGnrc);\r
       if (moData != null) {\r
         allMatchedChilds.add(new MOMetaData(\r
             getTR69MOByReplacingIndexes(param.getParamName(), moData.getMoName()),\r
@@ -199,9 +218,7 @@ public class MOMetaDataUtil {
         tr69Mo = tr69Mo.replaceFirst(GENERIC_INDEX_REGEX, "." + split[i] + ".");\r
       }\r
     }\r
-\r
     return tr69Mo;\r
-\r
   }\r
 \r
   public static String getNetConfMOByReplacingIndexes(String netconfMo, String tr69Mo) {\r
@@ -212,9 +229,6 @@ public class MOMetaDataUtil {
         netconfMo = netconfMo.replaceFirst(GENERIC_INDEX_REGEX, "." + split[i] + ".");\r
       }\r
     }\r
-\r
     return netconfMo;\r
-\r
   }\r
-\r
 }\r