[ONOS-4547, ONOS-4566, ONOS-4575, ONOS-4582, ONOS-4581, ONOS-4600,
ONOS-4598, ONOS-4607, ONOS-4610, ONOS-4611] Prefix addition from config
 and defect fixes.

Change-Id: Ieaab5d3e0fe9a1bfa24a2527eeec5435cf0a1b85
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
index cebd680..874f8ed 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
@@ -52,4 +52,34 @@
         thrown.expectMessage("YANG file error : \"anyxml\" is not supported.");
         manager.getDataModel("src/test/resources/AnyxmlStatement.yang");
     }
+
+    /**
+     * Checks whether exception is thrown when extra brace is added in the EOF.
+     */
+    @Test
+    public void processFileWithExtraBrace() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("mismatched input '}' expecting <EOF>");
+        manager.getDataModel("src/test/resources/ProcessFileWithExtraBrace.yang");
+    }
+
+    /**
+     * Checks whether exception is thrown when leaf is given after module ends.
+     */
+    @Test
+    public void processFileWithExtraLeaf() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("mismatched input 'leaf' expecting <EOF>");
+        manager.getDataModel("src/test/resources/ProcessFileWithExtraLeaf.yang");
+    }
+
+    /**
+     * Checks whether exception is thrown when extra brace is added in between the EOF.
+     */
+    @Test
+    public void processFileWithExtraBraceInBetween() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("mismatched input 'container' expecting <EOF>");
+        manager.getDataModel("src/test/resources/ProcessFileWithExtraBraceInBetween.yang");
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
index ae15d0c..3df9c13 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
@@ -267,4 +267,36 @@
         assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
         assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
     }
+
+    /**
+     * Checks whether space can be allowed when length statement is present.
+     */
+    @Test
+    public void processLengthStatementWithSpace() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/LengthStatementWithSpace.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+        YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
+                .getDataType().getDataTypeExtendedInfo();
+        YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+        ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+                .listIterator();
+
+        YangRangeInterval rangeInterval = lengthListIterator.next();
+
+        assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+        assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
index 88672fd..466bb97 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
@@ -207,4 +207,33 @@
         assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
         assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
     }
+
+    /**
+     * Checks whether space can be allowed when range statement is present.
+     */
+    @Test
+    public void processRangeStatementWithSpace() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/RangeStatementWithSpace.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+        YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
+                .getDataType().getDataTypeExtendedInfo();
+
+        ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+                .listIterator();
+        YangRangeInterval rangeInterval = rangeListIterator.next();
+        assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+        assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataTypeTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataTypeTest.java
index 11a2fa2..85aac96 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataTypeTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataTypeTest.java
@@ -59,6 +59,7 @@
     private static final String CLASS_INFO5 = "Integer";
     private static final String TYPE_DEF_PKG = "target.test";
     private static String test = "";
+    private static YangToJavaNamingConflictUtil pluginConfig = null;
 
     /**
      * Unit test for private constructor.
@@ -88,7 +89,6 @@
      */
     @Test
     public void testgetJavaClassInfo() {
-        YangToJavaNamingConflictUtil pluginConfig = null;
         test = getJavaImportClass(getStubYangType(TYPE1), false, pluginConfig);
         assertThat(true, is(test.equals(CLASS_INFO1)));
 
@@ -125,16 +125,16 @@
      */
     @Test
     public void testgetJavaPkgInfo() {
-        test = getJavaImportPackage(getStubYangType(TYPE1), false, CLASS_INFO1);
+        test = getJavaImportPackage(getStubYangType(TYPE1), false, CLASS_INFO1, pluginConfig);
         assertThat(true, is(test.equals(JAVA_LANG)));
 
-        test = getJavaImportPackage(getStubYangType(TYPE2), true, CLASS_INFO5);
+        test = getJavaImportPackage(getStubYangType(TYPE2), true, CLASS_INFO5, pluginConfig);
         assertThat(true, is(test.equals(JAVA_LANG)));
 
-        test = getJavaImportPackage(getStubYangType(TYPE3), false, CLASS_INFO3);
+        test = getJavaImportPackage(getStubYangType(TYPE3), false, CLASS_INFO3, pluginConfig);
         assertThat(null, is(test));
 
-        test = getJavaImportPackage(getStubYangType(TYPE4), false, CLASS_INFO4);
+        test = getJavaImportPackage(getStubYangType(TYPE4), false, CLASS_INFO4, pluginConfig);
         assertThat(null, is(test));
     }
 
@@ -145,7 +145,7 @@
      */
     @Test
     public void testForTypeDef() throws DataModelException {
-        test = getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, TYPE_DEF_PKG);
+        test = getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, TYPE_DEF_PKG, pluginConfig);
         assertThat(true, is(test.equals(TYPE_DEF_PKG)));
     }
 
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java
index a3b9200..6b86b9c 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java
@@ -19,7 +19,10 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
 
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
@@ -38,6 +41,9 @@
  */
 public final class JavaIdentifierSyntaxTest {
 
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
     private static final String PARENT_PACKAGE = "test5/test6/test7";
     private static final String CHILD_PACKAGE = "test1:test2:test3";
     private static final String DATE1 = "2000-1-5";
@@ -47,10 +53,17 @@
     private static final String DATE_WITH_REV1 = "rev20000105";
     private static final String DATE_WITH_REV2 = "rev19920125";
     private static final String VERSION_NUMBER = "v1";
+    private static final String VALID_PREFIX = "123add-prefix";
+    private static final String INVALID_PREFIX = "-*()&^&#$%";
+    private static final String INVALID_PREFIX1 = "abc~!@#$%^&*()_+}{:<>?`1234567890-=[]''|,./SS";
+    private static final String INVALID_NAME_SPACE_FOR_INVALID_PREFIX = "try:#test3:9case3";
     private static final String INVALID_NAME_SPACE1 = "byte:#test2:9test3";
     private static final String INVALID_NAME_SPACE2 = "const:#test2://9test3";
-    private static final String VALID_NAME_SPACE1 = "yangautoprefixbyte.test2.yangautoprefix9test3";
+    private static final String INVALID_NAME_SPACE3 = "CONST:TRY://9test3";
+    private static final String VALID_NAME_SPACE1 = "123addprefixbyte.test2.123addprefix9test3";
     private static final String VALID_NAME_SPACE2 = "yangautoprefixconst.test2.yangautoprefix9test3";
+    private static final String VALID_NAME_SPACE3 = "abc1234567890ssconst.test2.abc1234567890ss9test3";
+    private static final String VALID_NAME_SPACE4 = "yangautoprefixconst.yangautoprefixtry.yangautoprefix9test3";
     private static final String WITHOUT_CAMEL_CASE = "test-camel-case-identifier";
     private static final String WITH_CAMEL_CASE = "testCamelCaseIdentifier";
     private static final String WITHOUT_CAMEL_CASE1 = ".-_try-._-.123";
@@ -77,9 +90,16 @@
     private static final String WITH_CAMEL_CASE11 = "test3Name";
     private static final String WITHOUT_CAMEL_CASE12 = "TEST3name";
     private static final String WITH_CAMEL_CASE12 = "test3Name";
+    private static final String WITHOUT_CAMEL_CASE13 = "t-RY";
+    private static final String WITH_CAMEL_CASE13 = "tRy";
+    private static final String WITHOUT_CAMEL_CASE14 = "TRY";
+    private static final String WITH_CAMEL_CASE14 = "yangAutoPrefixTry";
     private static final String WITHOUT_CAPITAL = "test_this";
     private static final String WITH_CAPITAL = "Test_this";
     private static final String WITH_SMALL = "test_this";
+    private static final String WITH_CAMEL_CASE_WITH_PREFIX = "123addPrefixTry";
+    private static final String WITH_CAMEL_CASE_WITH_PREFIX1 = "abc1234567890Ss1123G123Gaa";
+    private static YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
 
     /**
      * Unit test for private constructor.
@@ -111,22 +131,44 @@
      */
     @Test
     public void getRootPackageTest() {
-        String rootPackage = getRootPackage((byte) 1, CHILD_PACKAGE, DATE1);
+        conflictResolver.setPrefixForIdentifier(null);
+        String rootPackage = getRootPackage((byte) 1, CHILD_PACKAGE, DATE1, conflictResolver);
         assertThat(rootPackage.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
                 + PERIOD + CHILD_WITH_PERIOD + PERIOD + DATE_WITH_REV1), is(true));
     }
 
     /**
+     * Unit test for root package generation with invalid prefix.
+     */
+    @Test
+    public void getRootPackageWithInvalidPrefix() throws TranslatorException {
+        thrown.expect(TranslatorException.class);
+        thrown.expectMessage("The given prefix in pom.xml is invalid.");
+        conflictResolver.setPrefixForIdentifier(INVALID_PREFIX);
+        String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE_FOR_INVALID_PREFIX, DATE1, conflictResolver);
+    }
+
+    /**
      * Unit test for root package generation with special characters presence.
      */
     @Test
     public void getRootPackageWithSpecialCharactersTest() {
-        String rootPackage = getRootPackage((byte) 1, INVALID_NAME_SPACE1, DATE1);
+        conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
+        String rootPackage = getRootPackage((byte) 1, INVALID_NAME_SPACE1, DATE1, conflictResolver);
         assertThat(rootPackage.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
                 + PERIOD + VALID_NAME_SPACE1 + PERIOD + DATE_WITH_REV1), is(true));
-        String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, DATE1);
+        conflictResolver.setPrefixForIdentifier(null);
+        String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, DATE1, conflictResolver);
         assertThat(rootPackage1.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
                 + PERIOD + VALID_NAME_SPACE2 + PERIOD + DATE_WITH_REV1), is(true));
+        String rootPackage2 = getRootPackage((byte) 1, INVALID_NAME_SPACE3, DATE1, conflictResolver);
+        assertThat(rootPackage2.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
+                + PERIOD + VALID_NAME_SPACE4 + PERIOD + DATE_WITH_REV1), is(true));
+        conflictResolver.setPrefixForIdentifier(INVALID_PREFIX1);
+        String rootPackage3 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, DATE1, conflictResolver);
+        assertThat(rootPackage3.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
+                + PERIOD + VALID_NAME_SPACE3 + PERIOD + DATE_WITH_REV1), is(true));
+
     }
 
     /**
@@ -134,7 +176,7 @@
      */
     @Test
     public void getRootPackageWithRevTest() {
-        String rootPkgWithRev = getRootPackage((byte) 1, CHILD_PACKAGE, DATE2);
+        String rootPkgWithRev = getRootPackage((byte) 1, CHILD_PACKAGE, DATE2, null);
         assertThat(rootPkgWithRev.equals(
                 DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER + PERIOD + CHILD_WITH_PERIOD + PERIOD + DATE_WITH_REV2),
                 is(true));
@@ -154,32 +196,63 @@
      */
     @Test
     public void getCamelCaseTest() {
-        String camelCase = getCamelCase(WITHOUT_CAMEL_CASE, null);
+        conflictResolver.setPrefixForIdentifier(null);
+        String camelCase = getCamelCase(WITHOUT_CAMEL_CASE, conflictResolver);
         assertThat(camelCase.equals(WITH_CAMEL_CASE), is(true));
-        String camelCase1 = getCamelCase(WITHOUT_CAMEL_CASE1, null);
+        String camelCase1 = getCamelCase(WITHOUT_CAMEL_CASE1, conflictResolver);
         assertThat(camelCase1.equals(WITH_CAMEL_CASE1), is(true));
-        String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE2, null);
+        String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
         assertThat(camelCase2.equals(WITH_CAMEL_CASE2), is(true));
-        String camelCase3 = getCamelCase(WITHOUT_CAMEL_CASE3, null);
+        String camelCase3 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
         assertThat(camelCase3.equals(WITH_CAMEL_CASE3), is(true));
-        String camelCase4 = getCamelCase(WITHOUT_CAMEL_CASE4, null);
+        String camelCase4 = getCamelCase(WITHOUT_CAMEL_CASE4, conflictResolver);
         assertThat(camelCase4.equals(WITH_CAMEL_CASE4), is(true));
-        String camelCase5 = getCamelCase(WITHOUT_CAMEL_CASE5, null);
+        String camelCase5 = getCamelCase(WITHOUT_CAMEL_CASE5, conflictResolver);
         assertThat(camelCase5.equals(WITH_CAMEL_CASE5), is(true));
-        String camelCase6 = getCamelCase(WITHOUT_CAMEL_CASE6, null);
+        String camelCase6 = getCamelCase(WITHOUT_CAMEL_CASE6, conflictResolver);
         assertThat(camelCase6.equals(WITH_CAMEL_CASE6), is(true));
-        String camelCase7 = getCamelCase(WITHOUT_CAMEL_CASE7, null);
+        String camelCase7 = getCamelCase(WITHOUT_CAMEL_CASE7, conflictResolver);
         assertThat(camelCase7.equals(WITH_CAMEL_CASE7), is(true));
-        String camelCase8 = getCamelCase(WITHOUT_CAMEL_CASE8, null);
+        String camelCase8 = getCamelCase(WITHOUT_CAMEL_CASE8, conflictResolver);
         assertThat(camelCase8.equals(WITH_CAMEL_CASE8), is(true));
-        String camelCase9 = getCamelCase(WITHOUT_CAMEL_CASE9, null);
+        String camelCase9 = getCamelCase(WITHOUT_CAMEL_CASE9, conflictResolver);
         assertThat(camelCase9.equals(WITH_CAMEL_CASE9), is(true));
-        String camelCase10 = getCamelCase(WITHOUT_CAMEL_CASE10, null);
+        String camelCase10 = getCamelCase(WITHOUT_CAMEL_CASE10, conflictResolver);
         assertThat(camelCase10.equals(WITH_CAMEL_CASE10), is(true));
-        String camelCase11 = getCamelCase(WITHOUT_CAMEL_CASE11, null);
+        String camelCase11 = getCamelCase(WITHOUT_CAMEL_CASE11, conflictResolver);
         assertThat(camelCase11.equals(WITH_CAMEL_CASE11), is(true));
-        String camelCase12 = getCamelCase(WITHOUT_CAMEL_CASE12, null);
+        String camelCase12 = getCamelCase(WITHOUT_CAMEL_CASE12, conflictResolver);
         assertThat(camelCase12.equals(WITH_CAMEL_CASE12), is(true));
+        String camelCase13 = getCamelCase(WITHOUT_CAMEL_CASE13, conflictResolver);
+        assertThat(camelCase13.equals(WITH_CAMEL_CASE13), is(true));
+        String camelCase14 = getCamelCase(WITHOUT_CAMEL_CASE14, conflictResolver);
+        assertThat(camelCase14.equals(WITH_CAMEL_CASE14), is(true));
+    }
+
+    /**
+     * Unit test for getting the camel case along with the prefix provided.
+     */
+    @Test
+    public void getCamelCaseWithPrefixTest() {
+
+        conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
+        String camelCase = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
+        assertThat(camelCase.equals(WITH_CAMEL_CASE_WITH_PREFIX), is(true));
+        conflictResolver.setPrefixForIdentifier(INVALID_PREFIX1);
+        String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
+        assertThat(camelCase2.equals(WITH_CAMEL_CASE_WITH_PREFIX1), is(true));
+    }
+
+    /**
+     * Unit test for getting the camel case along with the invalid prefix provided.
+     */
+    @Test
+    public void getCamelCaseWithInvalidPrefixTest() throws TranslatorException {
+
+        thrown.expect(TranslatorException.class);
+        thrown.expectMessage("The given prefix in pom.xml is invalid.");
+        conflictResolver.setPrefixForIdentifier(INVALID_PREFIX);
+        String camelCase = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
     }
 
     /**