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
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
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
} 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
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
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
netconfMo = netconfMo.replaceFirst(GENERIC_INDEX_REGEX, "." + split[i] + ".");\r
}\r
}\r
-\r
return netconfMo;\r
-\r
}\r
-\r
}\r