Skip to content

Commit

Permalink
Fix handling of PARAMATERS that have more than 1 switch values (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
erssebaggala committed Sep 17, 2019
1 parent bdbea7b commit 2cac0b5
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 8 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>com.bodastage.boda_huaweicmobjectparser</groupId>
<artifactId>boda-huaweicmobjectparser</artifactId>
<packaging>jar</packaging>
<version>1.0.11-SNAPSHOT</version>
<version>1.0.12-SNAPSHOT</version>
<name>boda-huaweicmobjectparser-pr</name>
<url>http://maven.apache.org</url>
<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
Expand Down Expand Up @@ -46,7 +47,7 @@
*/
public class HuaweiCMObjectParser {

final static String VERSION = "1.0.11";
final static String VERSION = "1.0.12";

Logger logger = LoggerFactory.getLogger(HuaweiCMObjectParser.class);

Expand Down Expand Up @@ -180,6 +181,10 @@ public class HuaweiCMObjectParser {
// = new LinkedHashMap<String, LinkedHashMap<String, String>>();
LinkedHashMap<String, String> classNameAttrsMap = new LinkedHashMap<String, String>();

//This list should be ignored when checking for switches
private String[] moListWithoutMVValues = new String[]{"GCELLHOINTERRATLDB", "INVENTORYBOARD"};


/**
* ClassName tag stack.
*
Expand Down Expand Up @@ -252,6 +257,9 @@ public class HuaweiCMObjectParser {
*/
private Boolean extractParametersOnly = false;


private Boolean separateSwitches = false;

/**
* Add meta fields to each MO.
* FILENAME,DATETIME,NE_TECHNOLOGY,NE_VENDOR,NE_VERSION,NE_TYPE
Expand Down Expand Up @@ -562,8 +570,15 @@ public void startElementEvent(XMLEvent xmlEvent) throws FileNotFoundException {
if (attrName.equals("value")) {
paramValue = attrValue;

//e.g MO_BTS3900 -< MO and BTS3900
String[] moNameMinusNE = className.split("_");
String tempValue = paramValue;
if (tempValue.matches("^([^-]+-[^-]+)(?:&[^-]+-[^-]+)+$") && !paramName.equals("ACTION")) {
if (tempValue.matches("[^-]+-[^-]+.*")
&& !Arrays.asList(moListWithoutMVValues).contains(moNameMinusNE[0])
&& !paramName.equals("ACTION") ) {
// if (tempValue.matches("([^-]+-[^-]+&).*") && !paramName.equals("ACTION") ) {
// if (tempValue.matches("^([^-]+-[^-]+)(?:&[^-]+-[^-]+)+") && !paramName.equals("ACTION") ) {
// if (tempValue.matches("^([^-]+-[^-]+)(?:&[^-]+-[^-]+)+$") && !paramName.equals("ACTION")) {


String mvParameter = className + "_" + paramName;
Expand All @@ -581,7 +596,7 @@ public void startElementEvent(XMLEvent xmlEvent) throws FileNotFoundException {
String childParameter = vArray[0];
String childParameterValue = vArray[1];
String child = paramName + "_" + childParameter;

child = child.toUpperCase();
classNameAttrsMap.put(child, childParameterValue);

if( parserState == ParserStates.EXTRACTING_PARAMETERS){
Expand Down Expand Up @@ -704,19 +719,28 @@ public void endELementEvent(XMLEvent xmlEvent)
String parameterName = me.getKey();

String tempValue = classNameAttrsMap.get(parameterName);
//e.g MO_BTS3900 -< MO and BTS3900
String[] moNameMinusNE = className.split("_");

if (tempValue.matches("[^-]+-[^-]+.*")
&& !Arrays.asList(moListWithoutMVValues).contains(moNameMinusNE[0])
&& !parameterName.equals("ACTION")) {
// tempValue.matches("[^-]+-[^-]+")
// if (tempValue.matches("([^-]+-[^-]+&).*") && !parameterName.equals("ACTION") ) {
if (tempValue.matches("^([^-]+-[^-]+)(?:&[^-]+-[^-]+)+") && !parameterName.equals("ACTION") ) {
// if (tempValue.matches("^([^-]+-[^-]+)(?:&[^-]+-[^-]+)+") && !parameterName.equals("ACTION") ) {
String mvParameter = className + "_" + parameterName;
parameterChildMap.put(mvParameter, null);
Stack children = new Stack();

String[] valueArray = tempValue.split("&");


System.out.println(valueArray.toString());
for (int j = 0; j < valueArray.length; j++) {
String v = valueArray[j];
String[] vArray = v.split("-");
String childParameter = vArray[0];
String child = parameterName + "_" + childParameter;
child = child.toUpperCase();
if(!moiAttributes.contains(child)){
moiAttributes.push(child);
}
Expand Down Expand Up @@ -1026,6 +1050,15 @@ static public void showHelp(){
System.out.println("Usage: java -jar boda-huaweicmobjectparser.jar <fileToParse.xml|inputDirectory> <outputDirectory> [parser.cfg]");
}

/**
* Should switch parameters be split
*
* @param boolean b
*/
public void separateIndividualSwitches(Boolean b){
separateSwitches = b;
}

/**
* @param args the command line arguments
*
Expand All @@ -1046,8 +1079,13 @@ public static void main(String[] args) {
Boolean showVersion = false;
Boolean attachMetaFields = false; //Attach mattachMetaFields FILENAME,DATETIME,NE_TECHNOLOGY,NE_VENDOR,NE_VERSION,NE_TYPE

//Parameter that have swtiches in the avlue liks BIT1-0&BIT2-1 should be
//separated into individual parameters
Boolean sepSwitches = false;

try{
options.addOption( "p", "extract-parameters", false, "extract only the managed objects and parameters" );
options.addOption( "s", "separate-switches", false, "extract switch values as separate parameters." );
options.addOption( "v", "version", false, "display version" );
options.addOption( "m", "meta-fields", false, "add meta fields to extracted parameters. FILENAME,DATETIME,NE_TECHNOLOGY,NE_VENDOR,NE_VERSION,NE_TYPE" );
options.addOption( Option.builder("i")
Expand Down Expand Up @@ -1095,6 +1133,10 @@ public static void main(String[] args) {
onlyExtractParameters = true;
}


if(cmd.hasOption('s')){
sepSwitches = true;
}
if(cmd.hasOption('m')){
attachMetaFields = true;
}
Expand Down Expand Up @@ -1152,14 +1194,18 @@ public static void main(String[] args) {
HuaweiCMObjectParser cmParser = new HuaweiCMObjectParser();


if(onlyExtractParameters == true ){
if(onlyExtractParameters){
cmParser.setExtractParametersOnly(true);
}

if( attachMetaFields == true ){
if( attachMetaFields){
cmParser.setExtractMetaFields(true);
}

if(sepSwitches){
cmParser.separateIndividualSwitches(true);
}

if( parameterConfigFile != null ){
File f = new File(parameterConfigFile);
if(f.isFile()){
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/com/bodastage/boda_huaweicmobjectparser/AppTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.bodastage.boda_huaweicmobjectparser;

import java.io.File;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
Expand Down Expand Up @@ -33,6 +34,18 @@ public static Test suite()
*/
public void testApp()
{

ClassLoader classLoader = getClass().getClassLoader();
File inFile = new File(classLoader.getResource("gexport.xml").getFile());

HuaweiCMObjectParser parser = new HuaweiCMObjectParser();
String inputFile = inFile.getAbsolutePath();

String outputFolder = System.getProperty("java.io.tmpdir");

String[] args = { "-i", inputFile, "-o", outputFolder};

assertTrue( true );

}
}
58 changes: 58 additions & 0 deletions src/test/resources/gexport.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<bulkCmConfigDataFile>
<fileHeader/>
<configData>
<class name="BSC6900GSM">
<object technique="TECHNOLOGY" vendor="Huawei" version="VERSION">
<class name="MONAME_BSC6900GSM">
<object>
<parameter name="PARAMETER1" value="VALUE1"/>
<parameter name="PARAMETER2" value="VALUE2"/>
<parameter name="PARAMETER3" value="SWITCH1-VALUEX"/>
<parameter name="PARAMETERN" value="VALUEN"/>
</object>
<object>
<parameter name="PARAMETER1" value="VALUE1"/>
<parameter name="pARAMETER2" value="VALUE2"/>
<parameter name="PARAMETER3" value="SWITCH1-VALUEA"/>
<parameter name="PARAMETERN" value="VALUEN"/>
</object>
</class>
<class name="moname_BSC6900GSM">
<object>
<parameter name="PARAMETER1" value="VALUE1"/>
<parameter name="PARAMETER2" value="VALUE2"/>
<parameter name="PARAMETER3" value="SWITCH1-VALUEX"/>
<parameter name="PARAMETERN" value="VALUEN"/>
</object>
</class>
<class name="moname2_BSC6900GSM">
<object>
<parameter name="PARAMETER1" value="VALUE1"/>
<parameter name="PARAMETER2" value="VALUE2"/>
<parameter name="PARAMETER3" value="SWITCH1-VALUEX"/>
<parameter name="PARAMETERN" value="VALUEN"/>
</object>
</class>
<class name="GCELLHOINTERRATLDB">
<object>
<parameter name="INTERRATSERVICE..." value="SERVICE-BASED"/>
<parameter name="PARAMETER2" value="VALUE2"/>
<parameter name="PARAMETER3" value="SWITCH1-VALUEX"/>
<parameter name="PARAMETERN" value="VALUEN"/>
</object>
</class>
<class name="CAMGTCFG">
<object>
<parameter name="CELLCAALGOSWITCH" value="CADL2CCEXTSWITCH-1&amp;CADL3CCEXTSWITCH-0&amp;CADL3CCSWITCH-1&amp;CADL4CCSWITCH-0&amp;CADL5CCSWITCH-0&amp;CAENHAPERIODICCQIRPTSWITCH-0"/>
</object>
</class>
<class name="CAMGTCFG">
<object>
<parameter name="CELLCAALGOSWITCH" value="cadl2CCEXTSWITCH-1&amp;CADL3CCEXTSWITCH-0&amp;CADL3CCSWITCH-1&amp;CADL4CCSWITCH-0&amp;CADL5CCSWITCH-0&amp;CAENHAPERIODICCQIRPTSWITCH-0"/>
</object>
</class>
</object>
</class>
</configData>
</bulkCmConfigDataFile>

0 comments on commit 2cac0b5

Please sign in to comment.